我定义了一个map<string, list<string> > hash_data;
有两个线程要线程要对hash_data进行操作,其中一个是插入操作,一个是删除操作。
线程一:
map<string, list<string> >::iterator it = hash_data.find(key);
if (it == hash_data.end())
{
pthread_mutex_lock(&hash_mutex);
//新节点插入。
pthread_mutex_unlock(&hash_mutex);
}
else
{
string datatmp;
datatmp.append(data, data_len);
pthread_mutex_lock(&hash_mutex);
it->second.push_back(datatmp);
pthread_mutex_unlock(&hash_mutex);
}
线程二:
map<string, list<string> >::iterator it_data;
for (it_data = hash_data.begin(); it_data != hash_data.end();)
{
//一些数据操作,判断是否删除等。
pthread_mutex_lock(&hash_mutex);
hash_status.erase(it_data->first);
it_data->second.clear();
hash_data.erase(it_data++);
pthread_mutex_unlock(&hash_mutex);
}
以上线程在工作的时候会出现异常.
我不想对线程一加一个大锁,如下:
pthread_mutex_lock(&hash_mutex);
map<string, list<string> >::iterator it = hash_data.find(key);
if (it == hash_data.end())
{
//新节点插入。
}
else
{
string datatmp;
datatmp.append(data, data_len);
it->second.push_back(datatmp);
}
pthread_mutex_unlock(&hash_mutex);
因为这样会效率很低。
大家有什么高招没有,指点一下,谢谢大虾。