各位看官們,大家好,上一回中咱們說的是線程同步之信號量的例子,這一回咱們說的例子是:線程同步之互斥量。閒話休提,言歸正轉。讓我們一起talk C栗子吧!
看官們, 今天我們將介紹使用互斥量進行線程同步。互斥量的核心操作是加鎖/解鎖操作,我們可以使用相關的函數來進行加鎖/解鎖操作。接下來我們介紹與互斥量相關的函數。
int pthread_mutex_init (pthread_mutex_t *__mutex,const pthread_mutexattr_t *__mutexattr)
該函數用來對互斥量進行初始化。該函數有兩個參數,接下來我們分別介紹他們。
第一個參數是指向互斥量的指針,函數會對該指針所指的互斥量進行初始化操作; 第二個參數是指向互斥量屬性的指針,函數可以把互斥量屬性的值修改成該指針所指變量的值; 該函數運行成功時返回零,否則返回相應的錯誤代碼。
int pthread_mutex_destroy (pthread_mutex_t *__mutex)
該函數用來銷毀互斥量相關的資源; 該函數只有一個參數,參數是指向互斥量的指針,函數會銷毀與互斥量相關的資源; 該函數運行成功時返回零,否則返回相應的錯誤代碼。
int pthread_mutex_lock (pthread_mutex_t *__mutex)
該函數用來對互斥量進行加鎖操作; 該函數只有一個參數,參數是指向互斥量的指針,函數會對該指針所指的互斥量進行加鎖操作; 該函數運行成功時返回零,否則返回相應的錯誤代碼。
使用該函數時需要注意以下兩點事項:
如果互斥量已經被加鎖,那麼其它線程使用該函數加鎖時會阻塞該線程,直到互斥量被解鎖為止; 如果互斥量已經被加鎖,那麼同一線程對互斥量再次進行加鎖,那麼就會發生死鎖;
int pthread_mutex_trylock (pthread_mutex_t *__mutex)
該函數用來對互斥量進行嘗試性加鎖操作; 該函數只有一個參數,參數是指向互斥量的指針,函數會對該指針所指的互斥量進行加鎖操作; 該函數運行成功時返回零,否則返回相應的錯誤代碼。
該函數可以看作是pthread_mutex_lock函數的補充,它對互斥量進行嘗試性加鎖操作,嘗試性的含義就是說,如果互斥量已經被加鎖,那麼它不會去對互斥量進行重復加鎖操作,因此,現線程不會被阻塞,更不會發生死鎖,而是返回EBUSY。
int pthread_mutex_unlock (pthread_mutex_t *__mutex)
該函數用來對互斥量進行解鎖操作; 該函數只有一個參數,參數是指向互斥量的指針,函數會對該指針所指的互斥量進行解鎖操作; 該函數運行成功時返回零,否則返回相應的錯誤代碼。
各位看官,關於線程同步之互斥量的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。