我想我不太确定mutex的工作方式。如果mutex在某些条件后被锁定,它会仅锁定满足相同条件的线程,还是会锁定所有线程,无论mutex何时解锁?

例如:

if (someBoolean)
    pthread_mutex_lock(& mut);

someFunction();

pthread_mutex_unlock(& mut);


是所有线程都停止运行someFunction();,还是仅通过if语句的那些线程停止运行?

最佳答案

是所有线程都停止运行someFunction();,还是仅通过if语句的那些线程停止运行?


someBoolean为true的线程将获得锁。因此,只有在其他人持有相同锁的情况下,才会阻止这些线程调用someFunction()

但是,在提供的代码中,所有线程都将在互斥锁上调用pthread_mutex_unlock,无论它们是否实际锁定了它。对于使用默认参数创建的互斥锁,它构成undefined behavior且必须固定。

关于c++ - C++ Pthread互斥锁,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51980637/

10-13 03:20