当前位置: 技术问答>linux和unix
关于互斥锁问题的求助!
来源: 互联网 发布时间:2016-07-17
本文导语: 最近在研究互斥锁时有一个疑问:在使用互斥锁对一个函数加锁后,是由互斥量来标记,还是由内核来标记? 举例来说: 有一个函数func() 线程A中使用时需要加锁, pthread_mutex_t mute...
最近在研究互斥锁时有一个疑问:在使用互斥锁对一个函数加锁后,是由互斥量来标记,还是由内核来标记?
举例来说:
有一个函数func()
线程A中使用时需要加锁,
pthread_mutex_t mutex;
pthread_mutex_init(&mutex,NULL);
pthread_mutex_lock(&mutex);
func();
pthread_mutex_unlock(&mutex);
在线程B中使用时,是必须使用线程A中使用的互斥变量mutex(假设是定义为全局的)吗?还是能够使用自己定义的互斥变量?如:
pthread_mutex_t mutex2;
pthread_mutex_init(&mutex2, NULL);
pthread_mutex_lock(&mutex2);
func();
pthread_mutex_unlock(&mutex2);
我想知道的是,互斥锁是通过判断互斥变量(都使用全局互斥变量mutex的情况)是否被使用过来实现的,还是通过内核对函数func()做的标记来实现的(不同线程可以使用不同的互斥变量mutex,mutex2)。
希望高人给讲解一下,不胜感激!
举例来说:
有一个函数func()
线程A中使用时需要加锁,
pthread_mutex_t mutex;
pthread_mutex_init(&mutex,NULL);
pthread_mutex_lock(&mutex);
func();
pthread_mutex_unlock(&mutex);
在线程B中使用时,是必须使用线程A中使用的互斥变量mutex(假设是定义为全局的)吗?还是能够使用自己定义的互斥变量?如:
pthread_mutex_t mutex2;
pthread_mutex_init(&mutex2, NULL);
pthread_mutex_lock(&mutex2);
func();
pthread_mutex_unlock(&mutex2);
我想知道的是,互斥锁是通过判断互斥变量(都使用全局互斥变量mutex的情况)是否被使用过来实现的,还是通过内核对函数func()做的标记来实现的(不同线程可以使用不同的互斥变量mutex,mutex2)。
希望高人给讲解一下,不胜感激!
|
看来你没有明白互斥量的真正含义。
不同的线程对同一临界区进行操作时,若使用互斥量mutex,所有线程中均使用该互斥量。
有一个函数func()
线程A中使用时需要加锁,
pthread_mutex_t mutex;(全局)
pthread_mutex_init(&mutex,NULL);
pthread_mutex_lock(&mutex);
func();
pthread_mutex_unlock(&mutex);
B直接调用如下:
pthread_mutex_lock(&mutex);
func();
pthread_mutex_unlock(&mutex);
不同的线程对同一临界区进行操作时,若使用互斥量mutex,所有线程中均使用该互斥量。
有一个函数func()
线程A中使用时需要加锁,
pthread_mutex_t mutex;(全局)
pthread_mutex_init(&mutex,NULL);
pthread_mutex_lock(&mutex);
func();
pthread_mutex_unlock(&mutex);
B直接调用如下:
pthread_mutex_lock(&mutex);
func();
pthread_mutex_unlock(&mutex);
|
哦,我也在学这个,没错的话应该是定义全局变量pthread_mutex_t mutex 然后全部都用这一个
就把它想成是锁住了,如果要去获取数据,必须把这个锁打开,管它是谁都要打开这个锁才可以,所以应该就是同一个锁了.. 给我点分吧,我还没技术分呢。。。。一定要给我分哦,要是回答错了就不给吧
就把它想成是锁住了,如果要去获取数据,必须把这个锁打开,管它是谁都要打开这个锁才可以,所以应该就是同一个锁了.. 给我点分吧,我还没技术分呢。。。。一定要给我分哦,要是回答错了就不给吧
|
不同线程要使用相同的资源时,需要先得到同一个mutex。也就是说,两个mutex是护不相关的。
|
必须全局的。每个互斥锁有个唯一的标识一样。两个互斥锁变量之间是没影响的。