一、概述
在《執行緒程式設計常見api簡介(上) 》中講述了有關執行緒建立過程中常用的 api 的使用方法,本節繼續講述有關執行緒程式設計中常用 api 的使用方法。主要說明有關執行緒鎖、執行緒區域性變數等 api 的使用。
二、常用 api
1)執行緒鎖 api
1.1)執行緒鎖的初始化及銷毀:pthread_mutex_init/pthread_mutex_destroy;在 acl 庫中對應的 api 為:acl_pthread_mutex_init/acl_pthread_mutex_destroy。
/**1.2)執行緒鎖屬性物件的初始化及銷毀:pthread_mutexattr_init/pthread_mutexattr_destroy。* 初始化執行緒鎖物件
* @param mutex 執行緒鎖物件
* @param attr 執行緒鎖屬性物件
* @return 返回 0 表示成功,否則表示出錯
*/int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
/** * 銷毀執行緒鎖資源
* @param mutex 執行緒鎖物件,之前必須成功呼叫了
* pthread_mutex_init 初始化了執行緒鎖物件
* @return 返回 0 表示成功,否則表示出錯
*/int pthread_mutex_destroy(pthread_mutex_t *mutex);
/**除了上面所列出的初始化執行緒鎖的方法外,在linux**下還有乙個快速對執行緒鎖進行初始化的方法,如下宣告執行緒鎖變數即可:* 初始化執行緒鎖屬性物件
* @param attr 執行緒鎖屬性物件
* @return 返回 0 表示成功,否則表示出錯
*/int pthread_mutexattr_init(pthread_mutexattr_t *attr);
/** * 銷毀在初始化執行緒鎖屬性物件時分配的內部資源
* @param attr 執行緒鎖屬性物件
* @return 返回 0 表示成功,否則表示出錯
*/int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
pthread_mutex_t mutex = pthread_mutex_initializer;1.3)執行緒鎖加鎖解鎖 api:pthread_mutex_lock/pthread_mutex_unlock;在 acl 庫中相應的表現形式為:acl_pthread_mutex_lock/acl_pthread_mutex_unlock。
/**除了上面提到的阻塞式加鎖方法,還有乙個非阻塞式的加鎖方法,呼叫 pthread_mutex_trylock api:* 對執行緒鎖加鎖,一直至成功加鎖或出錯為止
* @param mutex 執行緒鎖物件
* @return 返回 0 表示成功加鎖,否則表示出錯
*/int pthread_mutex_lock(pthread_mutex_t *mutex);
/** * 對加鎖的執行緒鎖解鎖
* @param mutex 執行緒鎖物件
* @return 返回 0 表示成功解鎖,否則表示出錯,出錯原因一般為:
* 執行緒鎖物件無效或當前該解鎖執行緒並未擁有該執行緒鎖
*/int pthread_mutex_unlock(pthread_mutex_t *mutex);
/**需要區分 pthread_mutex_lock 和 pthread_mutex_trylock 兩種不同加鎖方法,前者在成功加鎖前會一直阻塞到其它執行緒釋放鎖(或出錯了),後者則會立即返回,根據其返回值來檢查是否成功加鎖。* 嘗試對執行緒鎖加鎖,如果該鎖未被其它執行緒擁有,則本加鎖執行緒便加鎖
* 成功,否則立即返回,並返回 ebusy 表示該執行緒鎖正被其它執行緒擁有
* @param mutex 執行緒鎖物件
* @return 返回 0 表示成功加鎖,否則返回未成功加鎖原因,一般
* 原因有:執行緒鎖物件無效,或該鎖正被其它執行緒加鎖
*/int pthread_mutex_trylock(pthread_mutex_t *mutex);
2)執行緒鎖示例
下面以乙個例子來簡要說明一下上面執行緒鎖的一些 api 的使用方法:
#include #include /* 全域性靜態執行緒鎖 */3) 執行緒區域性變數static pthread_mutex_t __mutex;
/* 全域性靜態變數 */
static int __count = 0;
static void *thread_fn(void *arg)
int main(void)
有關執行緒區域性變數的含義、api以及使用示例,請參考另外兩篇文章:《多執行緒開發時執行緒區域性變數的使用》,《再談執行緒區域性變數》。
個人微博:
github:
執行緒程式設計常見API簡介(中)
一 概述 在 執行緒程式設計常見api簡介 上 中講述了有關執行緒建立過程中常用的 api 的使用方法,本節繼續講述有關執行緒程式設計中常用 api 的使用方法。主要說明有關執行緒鎖 執行緒區域性變數等 api 的使用。二 常用 api 1 執行緒鎖 api 1.1 執行緒鎖的初始化及銷毀 pthr...
執行緒程式設計常見API簡介(下)
一 概述 本節將繼續說明有關執行緒程式設計常用 api 的使用方法,主要說一下與執行緒條件變數及執行緒訊號通知的 api。通過這些 api 可以實現執行緒之間的同步及通訊機制。二 執行緒條件變數 api 1 初始化 銷毀執行緒條件變數 pthread cond init pthread cond d...
網路程式設計api介面簡介
客戶端 int main printf ip s,port d n inet ntoa caddr.sin addr.s addr ntohs caddr.sin port 由於是自主設定的ip區域網所以不使用ntohl,類似有htonl,ntohl,htons,ntohs。while 1 if r...