一、概述
本節將繼續說明有關執行緒程式設計常用 api 的使用方法,主要說一下與執行緒條件變數及執行緒訊號通知的 api。通過這些 api 可以實現執行緒之間的同步及通訊機制。
二、執行緒條件變數 api
1)初始化/銷毀執行緒條件變數:pthread_cond_init/pthread_cond_destroy;在 acl 庫中相應的 api 為 acl_pthread_cond_init/acl_pthread_cond_destroy。
/**2)等待執行緒條件變數被其它執行緒通知:pthread_cond_wait/pthread_cond_timedwait,在 acl 庫中對應的 api 為 acl_pthread_cond_wait/acl_pthread_cond_timedwait。* 用執行緒條件變數屬性初始化執行緒條件變數物件
* @param cond 執行緒條件變數物件
* @param attr 條件變數屬性,用來設定執行緒
* 條件變數的屬性,該引數可以由 pthread_condattr_init/pthread_condattr_destroy 初始化和銷毀;該引數可以設為 null
* @return 返回 0 表示成功,否則出錯,錯誤號可以用 strerror 列印
*/int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
/** * 銷毀執行緒條件變數物件通過 pthread_cond_init 分配的資源
* @param cond 執行緒條件變數物件
* @return 返回 0 表示成功,否則出錯
*/int pthread_cond_destroy(pthread_cond_t *cond);
/**上面兩個等待執行緒條件變數的 api中,pthread_cond_timedwait 對於設計半駐留式執行緒非常有用,象 acl 庫中的半駐留式執行緒池就用到了它。* 擁有執行緒鎖;當執行緒條件變數被通知時,該執行緒首先會對執行緒鎖加鎖,然後返回
* 給呼叫者,即當該 api 返回時,當前執行緒已經擁有了其中的執行緒鎖
* @param cond 執行緒條件變數物件
* @param mutex 與執行緒條件變數配合使用的執行緒鎖
* @return 返回 0 表示阻塞當前執行緒的執行緒條件變數被其它執行緒通知,同
* 時當前執行緒獲得相應的執行緒鎖;否則,表示出錯,出錯原因一般是輸入的引數非法
*/int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
/** * 超時時間到達,該 api 相比 pthread_cond_wait 多出乙個等待超時時間
* @param cond 執行緒條件變數物件
* @param mutex 與執行緒條件變數配合使用的執行緒鎖
* @param abstime 超時時間截,當時間超過該
* 時間截後,即使執行緒條件變數未被通知,該 api 也會返回
* @return 返回 0 表示阻塞當前執行緒的執行緒條件變數被其它執行緒通知,同
* 時當前執行緒獲得相應的執行緒鎖;否則,如果返回值為 etimedout(在 acl 庫
* 中表示為 acl_etimedout)則表示該 api 是因為超時才返回的,同時會將
* 執行緒鎖加鎖,當為其它返回值時一般是因為輸入引數非法導致
*/int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime);
/**三、示例* 喚醒阻塞在某個執行緒條件變數上的乙個執行緒
* @param cond 執行緒條件變數物件
* @return 返回 0 表示成功,否則表示出錯
*/int pthread_cond_signal(pthread_cond_t *cond);
/** * 所有執行緒被喚醒後,會首先搶占引數中輸入的執行緒鎖(有可能是同乙個執行緒鎖,
* 也有可能不是),在獲得那個執行緒鎖後那些被喚醒的執行緒才會返回
* @param cond 執行緒條件變數物件
* 表示出錯
*/int pthread_cond_broadcast(pthread_cond_t *cond);
#include #include #include /* 快速初始化執行緒鎖和執行緒條件變數 */該例子非常簡單,使用者可以在自己的程式中靈活使用這些 api。static pthread_mutex_t __mutex = pthread_mutex_initializer;
static pthread_cond_t __cond = pthread_cond_initializer;
static void *thread_waiting(void* arg)
int main(void)
個人微博:
執行緒程式設計常見api簡介(上)
執行緒程式設計常見api簡介(中)
github:
執行緒程式設計常見API簡介(中)
一 概述 在 執行緒程式設計常見api簡介 上 中講述了有關執行緒建立過程中常用的 api 的使用方法,本節繼續講述有關執行緒程式設計中常用 api 的使用方法。主要說明有關執行緒鎖 執行緒區域性變數等 api 的使用。二 常用 api 1 執行緒鎖 api 1.1 執行緒鎖的初始化及銷毀 pthr...
執行緒程式設計常見API簡介(中)
一 概述 在 執行緒程式設計常見api簡介 上 中講述了有關執行緒建立過程中常用的 api 的使用方法,本節繼續講述有關執行緒程式設計中常用 api 的使用方法。主要說明有關執行緒鎖 執行緒區域性變數等 api 的使用。二 常用 api 1 執行緒鎖 api 1.1 執行緒鎖的初始化及銷毀 pthr...
陣列下常見api
乙個變數 儲存多個值 陣列是線性的 除了第乙個元素,每乙個元素都有乙個前驅元素,除了最後乙個元素,每乙個元素都有乙個後驅元素 var arr var arr 1,2,3,4,5,6,87 var arr new array var arr new array 1,2,3,4,5 如何獲取陣列中的元素...