gpt4 book ai didi

c++ - 为什么我的互斥量没有在我的其他线程锁定它之前锁定它?

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:33 25 4
gpt4 key购买 nike

我正在运行 1 个使用 pthreads 创建的线程,并且我在该线程和我的主线程之间使用了一个互斥锁。据我了解,一旦线程准备好锁定互斥锁,它将自旋锁定直到能够锁定。但是我遇到了一个没有自旋锁的问题。我有的伪代码。

主线程:

//I create thread 1 on this line, then it enters the while loop
while(p.size() > r.size()){
pthread_mutex_lock(&Mutex);
//calculations and decrease p.size()
pthread_mutex_unlock(&Mutex);
}

线程 1:

//wait 500ms before hitting mutex
pthread_mutex_lock(&Mutex);
//calculations
pthread_mutex_unlock(&Mutex);

我遇到的问题是 Thread 1 Mutex 永远不会锁定,直到主线程 while 循环退出。在主线程完成 while 循环之前,线程 1 到达互斥锁。

编辑:如果我在 while 循环结束时有 10 毫秒的延迟(互斥锁解锁后),那么这就解决了我的问题。但是如何在不增加 10 毫秒延迟的情况下解决问题。

最佳答案

您的主线程正在解锁互斥锁,然后立即再次锁定它。尝试在您的主循环中引入延迟(用于测试目的)以查看是否是问题所在。

查看此问题的答案: pthreads: thread starvation caused by quick re-locking

关于c++ - 为什么我的互斥量没有在我的其他线程锁定它之前锁定它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50247371/

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