條件變數的if與while

2021-08-14 22:34:09 字數 1016 閱讀 5509

此文是linux c++的乙個程式,該程式要求是給定乙個緩衝區,乙個生產者,乙個消費者,然後要求使用條件變數,互斥量來解決讀寫問題,其中有個重要的知識點就是,使用訊號量的時候,如何保證執行緒安全,如果有乙個生產者,多個消費者,這種情況下,條件變數wait地方就應該使用while,而非if,如果是單生產單消費,則可以用if。具體解釋見**注釋

/* ex7-4.c */

#include

#include

#define buffer_size 4

#define over (-1)

struct producers

;void init(struct producers *b)

void put(struct producers *b, int data)

b->buffer[b->writepos]=data;

b->writepos++;

if(b->writepos>=buffer_size) b->writepos=0;

pthread_cond_signal(&b->notempty);

pthread_mutex_unlock(&b->lock);

}int get(struct producers *b)

data=b->buffer[b->readpos];

b->readpos++;

if(b->readpos>=buffer_size) b->readpos=0;

pthread_cond_signal(&b->notfull);

pthread_mutex_unlock(&b->lock);

return data;

}struct producers  buffer;

void *producer(void *data)

put(&buffer,over);

return null;

}void *consumer(void *data)

return null;

}int main()

while條件語句

while條件語句 條件滿足一直迴圈,適合做守護程序,死迴圈,while是讀整行,for遇見空格就另起一行 語法 while 條件 do指令 done 案例 每個2秒記錄一次系統負載情況 while true do 也可以寫成 while do bin bash while true do upti...

條件變數 虛假喚醒 放到while迴圈的原因

linux中幫助中提到 在多核處理器下,pthread cond signal可能會啟用多於乙個執行緒 阻塞在條件變數上的執行緒 結果是,當乙個執行緒呼叫pthread cond signal 後,多個呼叫pthread cond wait 或pthread cond timedwait 的執行緒返...

關於while裡面條件變數的注意事項

the author is gao xiong include include include using namespace std int main cout endl while lo hi e v hi 此處hi先與lo作比較,然後hi再減一,減一後的hi賦給後面e v hi 中的hi co...