linux作業系統之條件變數

2021-09-30 15:46:19 字數 1686 閱讀 8315

(1)條件變數

條件變數本身不是鎖,但它可以造成執行緒阻塞,通常與互斥鎖配合使用。

(2)條件鎖相關函式

pthread_cond_t型別,用於定義條件變數

1)初始化乙個條件變數:pthread_cond_init

int pthread_cond_init(pthread_cond_t *restrict cond,const pthread_condattr_t *restrict attr);

引數2:條件變數的屬性,傳null即可,為預設值

可採用靜態初始化:pthread _cond_t cond=pthread_cond_initializer;

2)銷毀乙個條件變數:pthread_cond_destroy

int pthread_cond_destroy(pthread_cond_t *cond);

3)阻塞等待條件變數:pthread_cond_wait(配合互斥鎖使用)

int pthread_cond_wait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex);

函式作用: 

1>阻塞等待條件變數cond滿足。

2>釋放已掌握的互斥鎖(解鎖互斥量)相當於pthread_mutex_unlock(&mutex);

第1,2步為乙個原子操作

3>當被喚醒,pthread_cond_wait函式返回,解除阻塞並重新獲得互斥鎖pthread_mutex_lock(&mutex)

4)限時等待乙個條件變數(以絕對時間等待):pthread_cond_timewait

int pthread_cond_timewait(pthread_cond_t *restrict cond,pthread_mutex_t *restrict mutex,condt struct timespec*restrcit abstime);

struct timespec{

time_t tv_sec;//秒

long    tv_nsec;//納秒

abstime;絕對時間,通過time(null)函式獲取;

5)喚醒至少乙個阻塞在條件變數上的執行緒:pthread_cond_signal

int pthread_cond_signal(pthread_cond_t *cond);

6)喚醒全部阻塞在條件變數上的執行緒:pthread_cond_broadcast(pthread_cond_t  *cond);

(3)執行緒同步之生產者消費者變數模型

假定有兩個執行緒,乙個模擬生產者行為,乙個模擬消費者行為。兩個執行緒同時操作乙個共享資源(匯聚),生產者生產產品,消費者消費產品。

linux作業系統之競態條件(時序競態)

1 時序競態 前後兩次執行同乙個程式,出現的結果不同。2 pause函式 使用該函式會造成程序主動掛起,並等待訊號喚醒,呼叫該系統呼叫的程序會處於阻塞狀態 主動放棄cpu 函式原型 int pause void 返回值為 1,並設定errno為eintr 使用pause和alarm實現sleep函式...

Linux 作業系統之執行緒

程序部落格 執行緒 在乙個程式裡的乙個執行路線就叫做執行緒 thread 更準確的定義是 執行緒是乙個程序內部的控制序列。一切程序至少都有乙個執行執行緒。程序與執行緒 1.程序是資源競爭的基本單位。2.執行緒是程式執行的最小單位。3.執行緒共享程序資料,但也擁有自己的一部分資料。4.linux下的執...

Linux作業系統之RPM YUM

yumrpm qa檢視所有rpm包 rpm qa grep 檢視以安裝的 軟體rpm列表 rpm qi 軟體包名查詢軟體包資訊 rpm ql 軟體包名查詢軟體包中的檔案 rpm qf 檔案的全路徑名查詢檔案所屬的軟體包 rpm e rpm包的名稱 注意 如果其它軟體包依賴於將要解除安裝的軟體包,解除...