【发布时间】:2018-08-23 07:40:50
【问题描述】:
我想我有点不确定mutexs 的工作原理。如果 mutex 在某些条件后被锁定,它会只锁定满足相同条件的线程,还是会锁定所有线程,直到 mutex 被解锁?
例如:
if (someBoolean)
pthread_mutex_lock(& mut);
someFunction();
pthread_mutex_unlock(& mut);
会停止所有线程运行someFunction();,还是只停止那些通过 if 语句的线程?
【问题讨论】:
-
互斥不是魔法。不调用lock就不会加锁。
-
检查
someBoolean的锁看起来很可疑,可能导致数据争用,而且并非所有线程都试图锁定互斥锁。 -
@Mat,我的问题是,在它被锁定后,互斥锁是否只会停止通过相同条件并运行到
pthread_mutex_lock(& mut);语句的线程?或者是否所有线程都会停止,无论它们是否命中pthread_mutex_lock(& mut);语句。 -
正如我所说,没有魔法。如果一个线程不调用lock,它就不会加锁,也不会阻塞。
-
这不是关于互斥锁如何工作的问题,而是关于
if语句如何工作的问题。如果任何线程计算someBoolean,并发现它是true,那么它将执行then 子句(即pthread_mutex_lock(&mut))。如果someBoolean是false,则线程不会执行then 子句。如果变量与其他线程共享,线程在什么状态下找到someBoolean的问题可能很难回答。
标签: c++ multithreading pthreads