gpt4 book ai didi

c++ - 在互斥量上使用多个 std::unique_lock,FIFO 中的所有线程都等待进程?

转载 作者:行者123 更新时间:2023-12-05 03:36:00 24 4
gpt4 key购买 nike

当我有三个或更多线程时,如果互斥锁在一个线程中解锁,下一个将处理哪个线程?他们在先进先出规则?如果不是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
}

最佳答案

操作系统将决定哪个线程获取互斥锁是最有效的。您有责任确保安排的任何线程都能正常工作。

一般来说,一个线程不可能长时间被拒绝互斥锁,因为最终所有其他线程都会阻塞或耗尽它们的时间片,从而允许该线程获取互斥锁。但该平台不提供任何特定的公平性保证。

你不会想要 FIFO。那将是一场彻底的灾难。想象一下,如果每个线程需要获取锁 100 次。现在一个线程获得锁,释放它,然后几乎立即尝试获取锁。您希望它每次 都停止并切换到其他线程之一吗?您想要 300 次上下文切换和启动/停止吗?你绝对不知道。

关于c++ - 在互斥量上使用多个 std::unique_lock,FIFO 中的所有线程都等待进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69736275/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com