多个线程试图锁定
Multiple threads attempting to lock
我想在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(),然后循环返回下一个线程。
相关文章:
- 如何检查线程是否锁定
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 如何在实时应用程序中锁定线程
- 锁定来自其他线程的类成员
- 当只有一个线程主要使用该对象而其他线程很少使用它时,如何最小化该对象的互斥锁锁定?
- 将线程锁定很长时间
- C++将互斥锁锁定为来自另一个线程
- 在以读取为主的多线程程序中,可以使用原子来减少锁定吗
- std::weak_ptr<T>::锁定线程安全吗?
- 如何杀死被条件变量锁定的线程?
- 我是否需要在 OpenSSL 1.1.0+ 中使用加密锁定函数来实现线程安全?
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 线程锁定互斥锁的速度比 std::conditional_variable::wait() 快
- 线程安全 std::map:锁定整个映射和单个值
- 如何读取锁定多线程C++程序
- 是boost :: lockfree :: Queue(在多线程程序中)可锁定
- C 优化导致线程锁定
- OpenCV 函数在由C++线程程序调用的 Python 脚本本身调用时锁定
- QT 关闭窗口 QTest 在锁定线程中
- 锁定线程安全队列的移动构造函数的右值参数?