程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一起talk C栗子吧(第一百一十五回:C語言實例--線程同步之互斥量一)

一起talk C栗子吧(第一百一十五回:C語言實例--線程同步之互斥量一)

編輯:關於C語言

一起talk C栗子吧(第一百一十五回:C語言實例--線程同步之互斥量一)



各位看官們,大家好,上一回中咱們說的是線程同步之信號量的例子,這一回咱們說的例子是:線程同步之互斥量。閒話休提,言歸正轉。讓我們一起talk C栗子吧!

看官們, 今天我們將介紹使用互斥量進行線程同步。互斥量的核心操作是加鎖/解鎖操作,我們可以使用相關的函數來進行加鎖/解鎖操作。接下來我們介紹與互斥量相關的函數。

pthread_mutex_init函數

int pthread_mutex_init (pthread_mutex_t *__mutex,const pthread_mutexattr_t *__mutexattr)

該函數用來對互斥量進行初始化。該函數有兩個參數,接下來我們分別介紹他們。

第一個參數是指向互斥量的指針,函數會對該指針所指的互斥量進行初始化操作; 第二個參數是指向互斥量屬性的指針,函數可以把互斥量屬性的值修改成該指針所指變量的值; 該函數運行成功時返回零,否則返回相應的錯誤代碼。

pthread_mutex_destroy函數

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。

pthread_mutex_unlock函數

int pthread_mutex_unlock (pthread_mutex_t *__mutex)
該函數用來對互斥量進行解鎖操作; 該函數只有一個參數,參數是指向互斥量的指針,函數會對該指針所指的互斥量進行解鎖操作; 該函數運行成功時返回零,否則返回相應的錯誤代碼。

各位看官,關於線程同步之互斥量的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved