2010-06-23 50 views
0

當一個線程1已經獲取了互斥鎖對象時,如果線程2試圖獲取對同一個互斥對象的鎖,則線程2將被阻塞。 這裏是我的問題: 1. thread2如何知道互斥對象被解鎖? 2.將線程2嘗試獲取鎖定在預先設定的時間間隔?有關pthread_mutex_lock的一些問題

回答

0

這實際上是與操作系統有關的,但通常情況是thread2被暫停並放在由互斥鎖維護的等待列表中。當互斥體變爲可用時,互斥體等待列表上的線程將從列表中移除並放回到活動線程列表中。操作系統可以像往常一樣安排它。 thread2完全靜止,直到它可以獲取互斥量。

+0

@all 謝謝你們 – lakshman 2010-06-24 05:41:12

1

我感覺到對互斥體如何工作的誤解。當線程2嘗試獲取已由線程1擁有的互斥體時,嘗試接受互斥體的調用不會返回,直到互斥體變爲可用(除非您的trylock()變體有超時)。

因此,線程2不需要在那裏循環,並繼續嘗試採取互斥體(除非您使用超時,因此您可以基於其他條件取消互斥體,如取消條件)。

+0

我的解釋是OP在詢問有關互斥體本身的實現。 – mschaef 2010-06-23 15:26:21

+1

@mschaef:很可能你是對的。根據問題的措辭很難說OP的理解水平。 – 2010-06-23 15:37:40