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里面才能实现互斥