[英]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.