繁体   English   中英

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

[英]Why doesn't my mutex lock before my other thread locks it?

我正在运行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);

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

编辑:如果我的while循环结束时有10ms的延迟(互斥锁解锁后),则可以解决我的问题。 但是,如何在不增加10ms延迟的情况下解决问题。

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

查看以下问题的答案: pthreads:快速重新锁定导致的线程饥饿

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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