多个线程试图锁定

Multiple threads attempting to lock

本文关键字:锁定 线程      更新时间:2023-10-16

我想在c++程序中使用pthreads和pthread_互斥体。我还没有任何实际的代码,只是一个关于互斥锁如何工作的问题。如果我让线程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
??

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

不-将没有这样的保证排序。在线程1释放互斥锁后,线程3或线程2都可以获得它。这是无法预测的。

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

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

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