Posix多執行緒程式設計(1) 互斥鎖與條件變數

2021-05-25 04:54:58 字數 601 閱讀 1666

今天學習了多執行緒互斥鎖與條件變數,為了防止以後忘記,先記錄一下總結的工作流程(主要是函式pthread_cond_timewait())。下面是posix多執行緒程式設計中cond.c的**(加入幾條列印資訊)。

工作流程總結如下:

1、首先,主線程工作,鎖住互斥鎖,然後檢測「謂詞」 value,結果value==0,所以進入迴圈,遇到函式pthread_cond_timewait()。

2、首先對mutex進行解鎖,並等待條件變數cond(函式並未返回,而解鎖立刻進行)。

3、此時被阻塞在互斥鎖上的執行緒wait_thread被喚醒,鎖住互斥鎖,改變value值,傳送訊號,然後解鎖。

4、主線程接收到訊號,還是並不立刻返回,而是先上鎖,然後返回。主線程繼續執行,並測試value的值,value=1不滿足while,從而退出迴圈,然後繼續下面的工作。

(4)、由於用的是pthread_cond_timewait()函式,所以可能在主線程獲得條件滿足以前計時器已經超時,如果超時,函式上鎖後立刻返回,並且break跳出迴圈,繼續下面的處理。(不管什麼情況,pthread_cond_timewait()函式返回之前一定會先上鎖)

由於是初學,如果大家認為有什麼不妥之處,還望不吝賜教!

多執行緒程式設計 互斥鎖

多執行緒程式設計 互斥鎖 1 引言 互斥鎖,是一種訊號量,常用來防止兩個程序或執行緒在同一時刻訪問相同的共享資源。可以保證以下三點 1 原子性 把乙個互斥量鎖定為乙個原子操作,這意味著作業系統 或pthread函式庫 保證了如果乙個執行緒鎖定了乙個互斥量,沒有其他執行緒在同一時間可以成功鎖定這個互斥...

posix多執行緒 互斥量

1.互斥量初始化兩種方式 1 靜態初始化 include typedef struct my struct tag my struct t my struct t data int main int argc,char argv 2 動態初始化 include typedef struct my s...

Posix多執行緒程式設計學習筆記(四) 互斥量(1)

一 什麼是互斥鎖 另一種在多執行緒程式中同步訪問手段是使用互斥量。程式設計師給某個物件加上一把 鎖 每次只允許乙個執行緒去訪問它。如果想對 關鍵部分的訪問進行控制,你必須在進入這段 之前鎖定一把互斥量,在完成操作之後再開啟它。互斥量函式有 pthread mutex init 初始化乙個互斥量 pt...