1

我想在 C++ 程序中使用 pthreads 和 pthread_mutexes。我还没有任何实际代码,只是一个关于互斥锁如何工作的问题。如果我让线程 1 锁定了一个互斥锁,然后 n 个其他线程尝试锁定同一个互斥锁,那么当线程 1 解锁互斥锁时会发生什么行为?如果线程 1 获得锁,然后线程 2 尝试锁定,然后线程 3 尝试锁定,释放锁时线程 2 的优先级是否高于线程 3?

这是一个更有条理的锁定时间表:

thread 1 acquires lock
thread 2 attempts to lock
thread 3 attempts to lock
thread 4 attempts to lock
thread 1 unlocks mutex
??

换句话说,我希望线程按照它们尝试获取锁/创建的顺序执行。如果有更好的方法可以做到这一点,我非常愿意接受建议。

4

2 回答 2

4

不 - 不会有这样的保证订购。线程 1 释放后,互斥体线程 3 可以获取或线程 2 可以获取它。你无法预测。

阅读内容以获得解释。

于 2013-06-13T20:33:37.517 回答
0

我想我会发布我的解决方案,以便其他人可以看到潜在的修复:

我的主线程是通过锁定创建互斥锁并将每个线程放入std::queue.

在 main 开始时,我创建了一个管理器线程,它处于无限循环中,每个循环检查队列是否为空。if(! queue::empty())当管理器线程看到队列非空时(

于 2013-06-14T16:53:37.743 回答