国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Linux服務器 > 正文

淺談Linux條件變量的使用

2024-09-05 23:03:27
字體:
來源:轉載
供稿:網友

Linux線程同步之間存在多種機制,條件變量是一種類似操作系統里提到的生產者-消費者算法的同步機制,允許線程以無競爭的方式等待特定條件的發生。

示例偽代碼:

void* Thread1(void){  while(線程運行條件成立){    …    pthread_mutex_lock(qlock);    while(條件成立)pthread_cond_wait(qcond,qlock);或者pthread_cond_wait(qcond,qlock,timeout);      reset條件變量…    pthread_mutex_unlock(qlock);  }}void* Thread2(void){  while(線程運行條件成立){    …    pthread_mutex_lock(qlock);    set了條件變量…//可以發送處理信號    pthread_cond_signal(qcond);    或者    pthread_cond_broadcast(qcond);    pthread_mutex_unlock(qlock);  }}

 

條件變量需要配合互斥量一起使用,互斥量作為參數傳入wait函數,函數把調用線程放到等待條件的線程列表上,然后對互斥量解鎖,這兩個是原子操作。當線程等待到條件,從wait函數返回之前,會再次鎖住互斥量。

1.Lock
2.Unlock
3.等待
4.Lock
5.Unlock

第2,3,4步是wait的內部操作

在wait被喚醒后,還需要在while中去檢查條件,這是為了防止“驚群效應”,比如有兩個線程同時阻塞在wait,先后醒來,快的線程做完處理然后把條件reset了,并且對互斥量解鎖,此時慢的線程在wait里獲得了鎖(即第4步)返回,還再去做處理就會出問題。

以上就是小編為大家帶來的淺談Linux條件變量的使用全部內容了,希望大家多多支持VEVB武林網~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 建昌县| 永定县| 彰化县| 康保县| 灯塔市| 金门县| 长顺县| 公安县| 西畴县| 屏南县| 革吉县| 临湘市| 岑溪市| 汝南县| 武定县| 布拖县| 鄄城县| 五大连池市| 陈巴尔虎旗| 普格县| 临汾市| 西昌市| 塔城市| 澄迈县| 韩城市| 天祝| 出国| 东源县| 图片| 通海县| 蓝田县| 商洛市| 普格县| 望奎县| 积石山| 资阳市| 辽阳市| 永川市| 互助| 社会| 泗洪县|