我正在运行使用pthreads创建的1个线程,并且我在线程和主线程之间使用互斥锁。根据我的理解,一旦线程准备好锁定互斥锁,它将旋转锁定直到它能够锁定。但是我遇到了一个没有旋转锁定的问题。我有伪代码。
主线程:
//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永远不会锁定,直到主循环退出时。线程1在主线程完成while循环之前到达互斥锁。
编辑:如果我的while循环结束时有10ms的延迟(在互斥锁解锁后),那么这就解决了我的问题。但是如何在不增加10毫秒的延迟的情况下解决问题。
答案 0 :(得分:2)
您的主线程正在解锁互斥锁,然后立即再次锁定它。尝试在主循环中引入延迟(用于测试目的),看看这是否是问题。
查看此问题的答案: pthreads: thread starvation caused by quick re-locking