根據前面的分析,得到的結果不是我們想要的原因是–ticket操作不是原子操作,這個共享資源可能併發的切換大其他執行緒,導致有多個執行緒同時影響到這個共享資源,所以導致得到的結果不對。
pthread_mutex_t mutex = pthread_mutex_initializer
int
pthread_mutex_init
(pthread_mutex_t *restrict mutex,
const pthread_mutexattr_t *restrict attr)
;
pthread_mutex_t *restrict mutex:要初始化的互斥量
const pthread_mutexattr_t *restrict attr:指定了新建互斥鎖的屬性。
如果引數attr為null,則使用預設的互斥鎖屬性,預設屬性為快速互斥鎖
int
pthread_mutex_destroy
(pthread_mutex_t *mutex)
;
int
pthread_mutex_lock
(pthread_mutex_t *mutex)
;int
pthread_mutex_unlock
(pthread_mutex_t *mutex)
呼叫pthread_mutex_lock可能會遇到以下幾種情況
從上面的結果看現在的**已經是正確的了。
可重入執行緒安全
重入是指同乙個函式被不同的執行流呼叫時,前乙個執行流的流程還未結束,就有其他的執行流再次進入函式。乙個函式在從重的情況下,執行結果不會出現任何不同或者沒有任何執行問題,則稱該函式為可重入函式,反之為不可重入函式執行緒安全是指多個執行緒併發執行同一段**,不會出現不同的結果或不會出現執行問題。其中如果對全域性變數或對靜態變數進行操作,並且沒有鎖的保護的情況下,就有可能出現執行緒安全問題
注意:⚠️:可重入包含了執行緒安全問題。即如果乙個函式可重入就一定執行緒安全,反之如果乙個函式是執行緒安全的就不一定是可重入的
Linux 多執行緒程式設計(三)
繼續昨天的執行緒同步,條件變數 condition variables 是用於執行緒間,通訊共享資料狀態改變的機制。簡介條件變數的建立和銷毀 等待條件變數 喚醒等待條件變數的執行緒 簡介 當執行緒互斥地訪問一些共享的狀態時,往往會有些執行緒需要等到這些狀態改變後才應該繼續執行。如 有乙個共享的佇列,...
Linux 多執行緒程式設計(三)
繼續昨天的執行緒同步,條件變數 condition variables 是用於執行緒間,通訊共享資料狀態改變的機制。簡介 條件變數的建立和銷毀 等待條件變數 喚醒等待條件變數的執行緒 簡介 當執行緒互斥地訪問一些共享的狀態時,往往會有些執行緒需要等到這些狀態改變後才應該繼續執行。如 有乙個共享的佇列...
Linux驅動(三) 核心執行緒
linux驅動 三 核心執行緒 小狼 一 核心執行緒的建立 執行及結束 kthread create wake up process kthread stop do exit kthread run kthread stop do exit kernel thread daemonize compl...