第二節
計時等待
int pthread_cond_timewait(pthread_cond_t *cond,pthread_mutex *mutex,const timespec *abstime);
啟用乙個等待該條件的執行緒(存在多個等待執行緒時按入隊順序啟用其中乙個)
int pthread_cond_signal(pthread_cond_t *cond);
啟用所有等待執行緒
int pthread_cond_broadcast(pthread_cond_t *cond);
demo:
#include
#include
#include
pthread_mutex_t mutex = pthread_mutex_initializer;
pthread_cond_t cond = pthread_cond_initializer;
inttest1
(void
)int
test2
(void
)int
test3
(void
)int
main
(int argc,
char ar**)
然後講讀寫鎖
讀寫鎖的特點:當有執行緒讀時,允許其它執行緒讀,當有執行緒寫時,不允許其他執行緒讀寫。
// 初始化讀寫鎖
int pthread_rwlock_init(pthread_rwlock_t *rwlock,
const pthread_rwlockattr_t *attr);
// 申請讀鎖
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock );
// 申請寫鎖
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock );
// 嘗試以非阻塞的方式來在讀寫鎖上獲取寫鎖,
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
// 解鎖
int pthread_rwlock_unlock (pthread_rwlock_t *rwlock);
// 銷毀讀寫鎖
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
demo:
#include
#include
#include
pthread_rwlock_t rwlock;
int global_bit=5;
void
test1
(void
)void
test2
(void
)void
test3
(void
)int
main
(int argc ,
char
*ar**)
然後講自旋鎖 這個和互斥量差不多。這裡主要講另乙個同步 屏障。
屏障是協調多個執行緒並行工作的同步機制。允許多個執行緒並行工作的同步機制。屏障允許每個執行緒等待。直到所有執行緒的合作執行緒都達某一點,然後從該點繼續執行。比如上面已經看到的一種屏障,pthread_join()這就是一種,允許乙個執行緒等待,直到另乙個執行緒退出。 屏障的概念更廣,允許多個執行緒等待,直到所有執行緒處理完成工作,且不需要退出。
pthread_barrier_init() 初始化屏障
pthread_barrier_wait()// 表明執行緒已經完成工作,準備等待其他執行緒趕上來
對於呼叫pthread_barrier_wait的執行緒在螢幕計數未滿足條件時,會進入休眠狀態
#include
#include
#include
pthread_barrier_t barrier;
void
thr_fun
(void
*arg)
intmain()
linux多執行緒程式設計小結 一
執行緒是程序基本的基本排程單位。而程序是程式執行和資源分配的最小單位。可以減少資源的開銷.執行緒有專門的執行緒庫來呼叫thread.執行緒的建立用thread create int pthread create pthread t restrict thread,const pthread attr...
Linux 多執行緒程式設計(三)
繼續昨天的執行緒同步,條件變數 condition variables 是用於執行緒間,通訊共享資料狀態改變的機制。簡介條件變數的建立和銷毀 等待條件變數 喚醒等待條件變數的執行緒 簡介 當執行緒互斥地訪問一些共享的狀態時,往往會有些執行緒需要等到這些狀態改變後才應該繼續執行。如 有乙個共享的佇列,...
Linux 多執行緒程式設計(三)
繼續昨天的執行緒同步,條件變數 condition variables 是用於執行緒間,通訊共享資料狀態改變的機制。簡介 條件變數的建立和銷毀 等待條件變數 喚醒等待條件變數的執行緒 簡介 當執行緒互斥地訪問一些共享的狀態時,往往會有些執行緒需要等到這些狀態改變後才應該繼續執行。如 有乙個共享的佇列...