LINUX執行緒(五)執行緒同步

2021-10-14 08:02:38 字數 1639 閱讀 1310

執行緒同步,指乙個執行緒發出同一功能呼叫時,在沒有得到結果之前,該呼叫不返回。同時其他執行緒為保證資料一致性,不能呼叫該功能

鎖的使用:建議鎖,對公共資料進行保護,所有執行緒應該在訪問公共資料前先拿鎖再訪問,但鎖本身不具備強制性

pthread_mutex_t mutex

phtread_mutex_init(&mutex,null);

phtread_mutex_destroy(&mutex,null);

pthread_mutex_lock(&mutex)

pthread_mutex_trylock(&mutex) 嘗試加鎖,,失敗立即返回錯誤busy,不阻塞

pthread_mutex_unlock

restrict 關鍵字:用來限定指標變數,被該關鍵字限定的指標變數所指向的記憶體操作,必須由本指標完成

注意事項: 盡量保證鎖的粒度,越小越好

pthread_rwlock_init

pthread_rwlock_destroy

pthread_rwlock_rdlock

pthread_rwlock_wrlock

pthread_rwlock_tryrdlock

pthread_rwlock_trywrlock

pthread_rwlock_unlock

成功返回0 ,失敗直接返回錯誤號

pthread_rwlock_t 讀寫鎖

本身不是鎖,通常結合鎖來使用

pthread_cont_t //條件變數結構定義

pthread_cond_init

pthread_cond_destroy

pthread_cond_wait // 等待條件滿足

pthread_cond_timedwait //限時等待條件滿足

pthread_cond_signal // 喚醒阻塞在條件變數的單個執行緒

pthread_cond_broadcast // 喚醒阻塞在條件變數的所有執行緒

pthread_cond_wait (condition,mutex)

函式作用:

阻塞等待條件滿足

釋放已掌握的互斥鎖,1。2 兩步為原子操作

當被喚醒,函式返回時,解除阻塞,並重新申請互斥鎖,相當於phtread_mutex_lock(mutex)

pthread_cond_timedwait (condition,mutex,abstime)

可以應用於執行緒和程序間同步

相當於初始化值為n的互斥量,n表示可以同時訪問的執行緒數量

sem_t sem

int

sem_init

(sem_t *sem,

int pshared,

unsigned

int value)

pshared:

0: 用於執行緒間同步

1:用於程序間同步

value: n值

sem_destroy

sem_wait 等價 pthread_mutex_lock, 將訊號量–,當為0時,就會阻塞

sem_trywait

sem_timedwait

sem_post 等價 pthread_mutex_unlock, 將訊號量++

linux多執行緒學習筆記五 執行緒安全

一,執行緒安全基礎 乙個函式被稱為執行緒安全的當且僅當被多個併發執行緒反覆呼叫時,它會一直產生正確的結果。我們能夠定義出四類執行緒不安全函式。第一類 不保護共享變數的函式 共享變數在多執行緒中是共享資料,可以通過同步機制來保護共享資料。第二類 保護跨越多個呼叫狀態的函式 乙個偽隨機數生成器是乙個簡單...

C 多執行緒學習(五)執行緒同步和衝突解決

首先先說乙個執行緒不同步的例子吧,以下為售票員的模擬售票,多個售票員 100張門票,如下 using system using system.text using system.collections.generic using system.threading namespace threadte...

多執行緒(五) 執行緒的通訊

例題 使用兩個執行緒列印1 100。執行緒1,執行緒2交替列印。執行緒通訊的例子 使用兩個執行緒列印1 100.執行緒1,執行緒2,交替列印。class number implements runnable catch interruptedexception e system.out.printl...