首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

pthread_mutex_lock 锁住了一个链表结点,为啥另一个线程还是能对该结点进行操作

2013-02-27 
pthread_mutex_lock 锁住了一个链表结点,为什么另一个线程还是能对该结点进行操作?定义了一个class List{A

pthread_mutex_lock 锁住了一个链表结点,为什么另一个线程还是能对该结点进行操作?
定义了一个
class List
{Append();
Remove();
pthread_mutex_t   lock;
.......
}

然后在另一个测试的文件中的List list=new List()作为全局变量;
两个线程访问list。一个是Append()添加,另一个Remove()删除;
锁已经初始化过了,返回值是0;
然后我是  
{
pthread_mutex_lock(&list->lock);
list->Append();
然后在这儿让出该线程;---就是为了测试还没解锁的情况下另一个线程能不能访问。因为是单处理器的,必须人工让出线程,才能实现并行的思想。
pthread_mutex_unlock(&list->lock);
}

另一个线程{Remove();让出线程;}


事实是另一个线程可以在该线程还没解锁的情况下访问该链表,进行Remove()操作,请问这是为什么啊?
我真的纠结很久很久了,真的想不通,真心请各位帮忙一下!

[解决办法]
互斥锁锁住的不是变量,而是代码,在同一时刻最多只有一个线程运行在pthread_mutex_lock与pthread_mutex_unlock所包含的代码之间,所以你Remove();函数也应该被包含在pthread_mutex_lock与pthread_mutex_unlock里面才能实现互斥

热点排行