linux多執行緒程式設計小結 三

2021-10-08 18:24:20 字數 2098 閱讀 8552

第二節

計時等待

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 是用於執行緒間,通訊共享資料狀態改變的機制。簡介 條件變數的建立和銷毀 等待條件變數 喚醒等待條件變數的執行緒 簡介 當執行緒互斥地訪問一些共享的狀態時,往往會有些執行緒需要等到這些狀態改變後才應該繼續執行。如 有乙個共享的佇列...