為什麼pthread cond wait兩端需要mutex鎖呢?

時間 2021-05-13 08:20:00

1樓:Aman

因為 locked 是 cond wait 的前置條件。

cond wait 的動作是,原子地「釋放鎖並阻塞當前執行緒」。釋放鎖是為了給另乙個(試圖獲取鎖的)執行緒機會,允許它運算元據,使等待的條件得以滿足。

另乙個執行緒獲取到鎖的時候,當前執行緒一定已經進入阻塞狀態了;它操作完資料之後,釋放鎖並使用 cond signal 解除阻塞執行緒的阻塞。

所以當前執行緒呼叫的 cond wait 返回之後:第一,鎖已經重新獲取(就像沒釋放過一樣);第二,等待的條件已經滿足。

最經典的場景就是 producer-consumer 模型:生產者產生資料,並把資料塞入一條佇列;消費者從佇列中取出資料並消費掉。兩者在不同的執行緒裡執行以求效率,所以佇列要用鎖來保護,防止資料競爭導致損壞。

那麼,消費者要消費資料,前提是佇列裡面有資料;要知道佇列裡有沒有資料,就要先獲取鎖,然後讀佇列長度變數。如果佇列有資料則正常消費即可,如果沒有,則可以使用 cond wait,等待生產者把新的資料塞進來。所以,就很顯然,cond wait 第乙個動作是釋放鎖,否則生產者根本沒機會去操作佇列。

使用 cond 而不使用 while 迴圈來檢測佇列長度,是因為前者能讓作業系統把 CPU 時間片讓給其它執行緒利用起來,而後者只能不斷重複獲取-檢查-釋放的動作,是一種對 CPU、電池和電能的浪費。

pthread_cond_wait

2樓:

因為pthread_cond_wait內部工作原理,它要求你呼叫它的時候,呼叫執行緒已經在某個mutex加鎖,並把這個鎖提供給它.

參考.有詳細解釋.

Linux條件變數pthread_condition細節(為何先加鎖,pthread_cond_wait為何先解鎖,返回時又加鎖)_運維_Lupin-CSDN部落格

為什麼要重男輕女,為什麼?

Stunk 簡單說說國內重男輕女的假象 嫁出去的女兒潑出去的水 這是一句俗話,深入人心 現代社會,物質生產跟上來了,女兒們開始反哺原生家庭了,於是也出現了農村地區殺男嬰的故事 先說說古代為何 重男輕女 因為女兒不顧原生家庭 在物質匱乏的古代,生存本來就是一件難事,讓女人來顧家是不可能的 怎麼得出這個...

為什麼那麼焦慮?為什麼那麼勢利?為什麼那麼急於成功?

個人感覺最重要的是人在社會中的安全感。其實真不是每個人都那麼地渴望成功,而且成功的定義本來就是多種多樣的。但在中國,如果你沒有達到廣泛定義上的 成功 你可能會有以下的結果 你可能在城市中會隨時沒有安身之所,你可能會遭受不公但投訴無門,你的父母至親可能患病也得不到最基本救助,你的孩子可能得不到平等的教...

我為什麼是我?為什麼?

主角戲 馬克思說過,人是所有社會關係的總和,所以首先,你作為人來說,你只是你周圍所有關係的總和,你的偏執,你的瘋狂,你的愛情,你的孝順,你的所有人生觀,價值觀,世界觀,宇宙觀,形成了你。但是你錯誤的把這些當成了你,其實這些都是人的錯誤認識,心 的本體,也就是能生萬物,能生萬法的這個東西沒有被發現之前...