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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 閉包函式(匿名函式)的理解函式
- 【函式】oracle視窗函式over()的理解函式Oracle
- 遞迴函式的理解遞迴函式
- 理解仿函式函式
- TypeScript 中函式的理解?與 JavaScript 函式的區別?TypeScript函式JavaScript
- JS的學習理解--->函式JS函式
- 關於count函式的理解函式
- 回撥函式的理解(一)函式
- 理解Underscore中的_.bind函式函式
- 理解Underscore中的flatten函式函式
- 自執行函式的理解函式
- 如何理解Vue的render函式Vue函式
- 理解JavaScript的函式呼叫和thisJavaScript函式
- Java回撥函式的理解Java函式
- 深入理解 函式、匿名函式、自執行匿名函式函式
- 理解zip函式的工作流程函式
- 理解Python中的Lambda函式Python函式
- 理解Underscore中的節流函式函式
- 對JavaScript中函式物件的理解JavaScript函式物件
- 理解 JavaScript 中的高階函式JavaScript函式
- 理解Underscore中的去抖函式函式
- 理解Vue中的Render渲染函式Vue函式
- 深入理解 JavaScript 中的函式JavaScript函式
- 理解 PostgreSQL 的 count 函式的行為SQL函式
- 理解 pcntl_fork 函式函式
- 理解函式防抖Debounce函式
- 如何理解jQuery.on()函式jQuery函式
- webGL: vertexAttribPointer 函式理解Web函式
- 理解JavaScript中函式方法JavaScript函式
- 如何理解高階函式函式
- 深入理解 Generator 函式函式
- 深入理解箭頭函式和傳統函式的區別函式
- 深入理解函式節流與函式防抖函式
- Spark Streaming函式的分析與理解Spark函式
- JavaScript自執行函式(function(){})()的理解JavaScript函式Function
- 函式呼叫中堆疊的個人理解函式
- Oracle中coalesce函式的簡單理解Oracle函式
- [譯] 理解JS的函式呼叫和‘this’的指向JS函式