在我的其他线程锁定之前,为什么我的互斥锁没有锁定?

时间:2018-05-09 07:04:21

标签: c++ c multithreading pthreads mutex

我正在运行使用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毫秒的延迟的情况下解决问题。

1 个答案:

答案 0 :(得分:2)

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

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