![](/img/trans.png)
[英]Order how multiple threads reacquire std::unique_lock<std::mutex> after std::condition_variable::notify_all
[英]Use multiple std::unique_lock on mutex, all threads in FIFO to wait process?
当我有三个或更多线程时,如果互斥锁在一个线程中解锁,下一个将处理哪个? 他们在先进先出规则? 如果不是FIFO,几个线程等待unlock(),会不会有一个线程从不处理? 他们是否在排序的队列中等待,排序的规则是什么?
示例代码:
//thread No.1
func1(){
std::unique_lock<mutex> lock(_mtx);
//do something, now in here,and will leave this thread then mutex will unlock
}
//thread No.2
func2(){
std::unique_lock<mutex> lock(_mtx);
//do something
}
//thread No.3
func3(){
std::unique_lock<mutex> lock(_mtx);
//do something
}
操作系统将决定哪个线程获得互斥量最有效。 您有责任确保任何被调度的线程都能按照您的需要工作。
通常,线程不可能长时间拒绝互斥锁,因为最终所有其他线程将阻塞或耗尽它们的时间片,从而允许该线程获取互斥锁。 但该平台不提供任何特别的公平保证。
你不会想要先进先出。 那将是一场彻头彻尾的灾难。 想象一下,如果每个线程需要获取锁 100 次。 现在一个线程获取锁,释放它,然后几乎立即尝试获取锁。 您是否希望它每次都停止并切换到其他线程之一? 你想要 300 次上下文切换和启动/停止吗? 你绝对不会。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.