Linux 執行緒掛起與喚醒功能 例項

2021-06-21 11:44:07 字數 1730 閱讀 6948

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個執行緒都掛起。如果將這十個執行緒都喚醒,則...