(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包的名稱 注意 如果其它軟體包依賴於將要解除安裝的軟體包,解除...