簡體   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