多个线程试图锁定

时间:2013-06-13 20:31:31

标签: c++ multithreading pthreads mutex

我想在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
??

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

2 个答案:

答案 0 :(得分:4)

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

阅读this以获取解释。

答案 1 :(得分:0)

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

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

在main的开头,我创建了一个管理器线程,这是一个无限循环,它检查每个循环队列是否为空。当经理线程看到队列是非空的时 (if(! queue::empty())),它等待获取锁,然后创建前端线程,从队列中弹出它,在线程上执行pthread_join()并循环返回下一个线程。