为什么我的互斥量没有在我的其他线程锁定它之前锁定它?
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);
我遇到的问题是 运行 Thread 1 Mutex 从不锁定,直到主线程 while 循环退出。线程 1 在主线程完成 while 循环之前到达互斥锁。
编辑:如果我在 while 循环结束时有 10 毫秒的延迟(互斥锁解锁后),那么这就解决了我的问题。但是如何在不增加 10ms 延迟的情况下解决问题。
您的主线程正在解锁互斥锁,然后立即再次锁定它。尝试在主循环中引入延迟(用于测试目的)以查看是否是问题所在。
查看此问题的答案:
pthreads: thread starvation caused by quick re-locking
我是 运行 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 循环退出。线程 1 在主线程完成 while 循环之前到达互斥锁。
编辑:如果我在 while 循环结束时有 10 毫秒的延迟(互斥锁解锁后),那么这就解决了我的问题。但是如何在不增加 10ms 延迟的情况下解决问题。
您的主线程正在解锁互斥锁,然后立即再次锁定它。尝试在主循环中引入延迟(用于测试目的)以查看是否是问题所在。
查看此问题的答案: pthreads: thread starvation caused by quick re-locking