日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linuxc线程信号-pthread_cond_wait理解

發布時間:2025/3/15 linux 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linuxc线程信号-pthread_cond_wait理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t*mutex)函數

傳入的參數mutex用于保護條件,由于我們在調用pthread_cond_wait時,假設條件不成立我們就進入堵塞。可是進入阻塞這個期間,假設條件變量改變了的話,那我們就漏掉了這個條件。由于這個線程還沒有放到等待隊列上。所以調用pthread_cond_wait前要先鎖相互排斥量,

即調用pthread_mutex_lock(),pthread_cond_wait在把線程放進堵塞隊列后,自己主動對mutex進行解鎖,使得

其他線程能夠獲得加鎖的權利。這樣其他線程才干對臨界資源進行訪問并在適當的時候喚醒這個堵塞的進程。

當pthread_cond_wait返回的時候又自己主動給mutex加鎖。


實際上邊代碼的加解鎖步驟例如以下:
/************pthread_cond_wait()的用法**********/
pthread_mutex_lock(&qlock);? ? /*lock*/
pthread_cond_wait(&qready, &qlock); /*block-->unlock-->wait() return-->lock*/
pthread_mutex_unlock(&qlock); /*unlock*/

/*****************************************************/


了解 pthread_cond_wait() 的作用很重要 -- 它是 POSIX 線程信號發送系統的核心,也是最難以理解的部分。

?

首先,讓我們考慮下面情況:線程為查看已鏈接列表而鎖定了相互排斥對象,然而該列表恰巧是空的。這一特定線程什么也干不了 -- 其設計意圖是從列表中除去節點,可是如今卻沒有節點。因此,它僅僅能:?

鎖定相互排斥對象時。線程將調用 pthread_cond_wait(&mycond,&mymutex)。

pthread_cond_wait() 調用相當復雜,因此我們每次僅僅運行它的一個操作。

?

pthread_cond_wait() 所做的第一件事就是同一時候對相互排斥對象解鎖(于是其他線程能夠改動已鏈接列表),并等待條件?signal 發生,當 pthread_cond_wait() 接收到還有一個線程的“信號”時,它將蘇醒(此時還要等其他線程mutex解鎖),蘇醒前會先對mutex加鎖。

轉載于:https://www.cnblogs.com/clnchanpin/p/6877117.html

總結

以上是生活随笔為你收集整理的linuxc线程信号-pthread_cond_wait理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。