pthread_cond_wait
多執行緒的條件變數
條件變數是利用執行緒間共享的
全域性變數
進行同步的一種機制,主要包括兩個動作:乙個執行緒等待"條件變數的條件成立"而掛起;另乙個執行緒使"條件成立"(給出條件成立訊號)。為了防止競爭,
條件變數
的使用總是和乙個
互斥鎖結合在一起。
建立和登出
條件變數和
互斥鎖一樣,都有
靜態動態兩種建立方式,靜態方式使用pthread_cond_initializer
常量,如下:
pthread_cond_t cond=pthread_cond_initializer
動態方式呼叫
pthread_cond_init()函式,api定義如下:
int
pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr)
儘管posix標準中為
條件變數定義了屬性,但在linuxthreads中沒有實現,因此cond_attr值通常為null,且被忽略。
等待和激發
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
在呼叫pthread_cond_wait()前必須由本
執行緒加鎖(pthread_mutex_lock()),而在更新條件
等待佇列
pthread_cond_signal()啟用乙個等待該條件的執行緒,存在多個等待執行緒時按入隊順序啟用其中乙個
/*
*主線程建立子執行緒(當前子執行緒為stop停止狀態),5秒後主執行緒喚醒子執行緒,
*10秒後主執行緒掛起子執行緒。15秒後主執行緒再次喚醒子執行緒,20秒後主執行緒執行完畢,
*等待子執行緒退出。
*/#include #include #include #define run 1
#define stop 0
pthread_mutex_t mut = pthread_mutex_initializer;
pthread_cond_t cond = pthread_cond_initializer;
int status = stop;
void *thread_function(void)
pthread_mutex_unlock(&mut);
printf("child pthread %d\n", i++);
if (i == 20)
sleep(1); }}
void thread_resume()
else }
void thread_pause()
else }
int main()
if (pthread_cond_init(&cond, null) != 0)
err = pthread_create(&child_thread,null,(void *)thread_function,null);
if (err != 0)
while(1)
if (i == 10)
if (i == 15)
if (i == 20)
}if (0 == pthread_join(child_thread, null))
return 0;
}
USB掛起與喚醒
usb可見裝置狀態分為連線 attached 上電 powered 預設 default 位址 address 配置 configured 和掛起 suspended 6個狀態。所謂可見,即usb系統和主機可見的狀態,其他狀態屬於usb裝置內部而不可見。其中有關電源的,大致可分下面三類 1.連線狀態...
執行緒的掛起,喚醒和終止
如果是利用h afxbeginthread 建立執行緒,需要獲取控制代碼,h m hthread 執行緒的掛起 在createthread 等函式建立執行緒時,可以指定執行緒的掛起狀態,在執行過程中也可以掛起執行緒 dword suspendthread handle hthread hthread...
java 執行緒的掛起和喚醒
這三個方法依賴於同乙個鎖物件,也就是說只能採用同乙個鎖的物件的notify喚醒該鎖wait造成的掛起。注意在呼叫notify和wait方法的時候,首先得獲取該鎖的使用許可權。wait 方法將執行緒阻塞。如果有十個執行緒呼叫了某個鎖物件的wait方法,則10個執行緒都掛起。如果將這十個執行緒都喚醒,則...