繁体   English   中英

在互斥锁上使用多个 std::unique_lock,FIFO 中的所有线程等待进程?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM