pthread_cond_wait()函式的理解
pthread_cond_wait()函式的理解
[@more@]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*/
/*****************************************************/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23168012/viewspace-1045826/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 閉包函式(匿名函式)的理解函式
- 遞迴函式的理解遞迴函式
- TypeScript 中函式的理解?與 JavaScript 函式的區別?TypeScript函式JavaScript
- 理解Underscore中的_.bind函式函式
- 理解Python中的Lambda函式Python函式
- JS的學習理解--->函式JS函式
- 理解Underscore中的flatten函式函式
- 關於count函式的理解函式
- 回撥函式的理解(一)函式
- 深入理解 函式、匿名函式、自執行匿名函式函式
- webGL: vertexAttribPointer 函式理解Web函式
- 理解zip函式的工作流程函式
- 理解 JavaScript 中的高階函式JavaScript函式
- 理解Underscore中的節流函式函式
- 理解Underscore中的去抖函式函式
- 對JavaScript中函式物件的理解JavaScript函式物件
- 理解 PostgreSQL 的 count 函式的行為SQL函式
- 理解Python函式閉包Python函式
- 理解函式防抖Debounce函式
- 理解 pcntl_fork 函式函式
- 如何理解jQuery.on()函式jQuery函式
- typedef void (*Fun) (void) 的理解——函式指標——typedef函式指標函式指標
- 深入理解箭頭函式和傳統函式的區別函式
- 深入理解函式節流與函式防抖函式
- [譯] 理解JS的函式呼叫和‘this’的指向JS函式
- vue所有生命週期函式/鉤子函式理解Vue函式
- 理解神經元和函式函式
- 需要認真理解方法函式函式
- 理解thunk函式的作用及co的實現函式
- 【翻譯】理解JS的函式呼叫和‘this’的指向JS函式
- 深入理解ES6 ---- 函式函式
- js 徹底理解回撥函式JS函式
- 深入理解 JavaScript 回撥函式JavaScript函式
- 深入理解Thread建構函式thread函式
- 理解JS函式之call,apply,bindJS函式APP
- 理解Underscore中的uniq(陣列去重)函式陣列函式
- 理解Vuex的輔助函式mapState, mapActions, mapMutations用法Vue函式
- 深入理解 Go 中的 new() 和 make() 函式Go函式
- 理解神經網路的不同損失函式神經網路函式