linuxc线程信号-pthread_cond_wait理解
pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t*mutex)函數(shù)
傳入的參數(shù)mutex用于保護(hù)條件,由于我們?cè)谡{(diào)用pthread_cond_wait時(shí),假設(shè)條件不成立我們就進(jìn)入堵塞。可是進(jìn)入阻塞這個(gè)期間,假設(shè)條件變量改變了的話,那我們就漏掉了這個(gè)條件。由于這個(gè)線程還沒(méi)有放到等待隊(duì)列上。所以調(diào)用pthread_cond_wait前要先鎖相互排斥量,
即調(diào)用pthread_mutex_lock(),pthread_cond_wait在把線程放進(jìn)堵塞隊(duì)列后,自己主動(dòng)對(duì)mutex進(jìn)行解鎖,使得
其他線程能夠獲得加鎖的權(quán)利。這樣其他線程才干對(duì)臨界資源進(jìn)行訪問(wèn)并在適當(dāng)?shù)臅r(shí)候喚醒這個(gè)堵塞的進(jìn)程。當(dāng)pthread_cond_wait返回的時(shí)候又自己主動(dòng)給mutex加鎖。
實(shí)際上邊代碼的加解鎖步驟例如以下:
/************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 線程信號(hào)發(fā)送系統(tǒng)的核心,也是最難以理解的部分。
?
首先,讓我們考慮下面情況:線程為查看已鏈接列表而鎖定了相互排斥對(duì)象,然而該列表恰巧是空的。這一特定線程什么也干不了 -- 其設(shè)計(jì)意圖是從列表中除去節(jié)點(diǎn),可是如今卻沒(méi)有節(jié)點(diǎn)。因此,它僅僅能:?
鎖定相互排斥對(duì)象時(shí)。線程將調(diào)用 pthread_cond_wait(&mycond,&mymutex)。
pthread_cond_wait() 調(diào)用相當(dāng)復(fù)雜,因此我們每次僅僅運(yùn)行它的一個(gè)操作。
?
pthread_cond_wait() 所做的第一件事就是同一時(shí)候?qū)ο嗷ヅ懦鈱?duì)象解鎖(于是其他線程能夠改動(dòng)已鏈接列表),并等待條件?signal 發(fā)生,當(dāng) pthread_cond_wait() 接收到還有一個(gè)線程的“信號(hào)”時(shí),它將蘇醒(此時(shí)還要等其他線程mutex解鎖),蘇醒前會(huì)先對(duì)mutex加鎖。
轉(zhuǎn)載于:https://www.cnblogs.com/clnchanpin/p/6877117.html
總結(jié)
以上是生活随笔為你收集整理的linuxc线程信号-pthread_cond_wait理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【面试笔记系列】排序算法汇总
- 下一篇: Linux基础知识一