c 多執行緒程式設計 條件變數

2021-07-25 03:31:10 字數 1387 閱讀 9103

#include "stdafx.h"

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace boost;

//冰淇淋商店

class cleamshop

bool is_empty()//判斷是否還有冰淇淋

public:

explicit cleamshop(const size_t &n):m_ncleamnum(0),capacity(n){}

//生產冰淇淋 //冰淇淋的id

void productcleams(int m_iid)

//上面的while**可以用下面這行**代替

//cond_canproduct.wait(lock,!bind(&cleamshop::is_full,this));

stk.push(m_iid);//生產好了乙個冰淇淋

++m_ncleamnum;

std::cout << this_thread::get_id() << "producted." << std::endl;

} while (0);

//通知乙個使用者說:可以購買冰淇淋了

//即cond_canbuy條件變數滿足了,

//其他在等待的乙個使用者執行緒不需要等待了,可以喚醒換回了

cond_canbuy.notify_one();

} void get(int *x)

//上面的while**可以用下面這行**代替

//cond_canbuy.wait(lock,!bind(&cleamshop::is_empty,this));

--m_ncleamnum;

*x = stk.top();

stk.pop();//購買了乙個冰淇淋

std::cout << this_thread::get_id() << "buied." << std::endl;

} while (0);

//通知乙個生產者執行緒現在可以生產冰淇淋了

cond_canproduct.notify_one();

}};

//建立乙個冰淇淋商店,生產冰淇淋的上限是5個

cleamshop buf(5);

//生產者生產冰淇淋

void producter(int n)//計畫生產0-n的冰淇淋

}//使用者購買冰淇淋

void consumer(int n)//打算購買n個冰淇淋

}void test1()

多執行緒程式設計 條件變數

條件變數 條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個動作 乙個執行緒等待 條件變數的條件成立 而掛起 另乙個執行緒使 條件成立 給出條件成立訊號 為了防止競爭,條件變數的使用總是和乙個互斥鎖結合在一起。1.建立和登出 條件變數和互斥鎖一樣,都有靜態和動態兩種建立方式,靜態...

多執行緒程式設計 條件變數

include include include include 靜態方式初始化乙個互斥鎖和乙個條件變數 static pthread mutex t mutex pthread mutex initializer static pthread cond t cond pthread cond ini...

多執行緒程式設計 條件變數

自 1 引言 條件變數是一種同步機制,允許執行緒掛起,直到共享資料上的某些條件得到滿足。條件變數上的基本操作有 觸發條件 當條件變為true 時 等待條件,掛起執行緒直到其他執行緒觸發條件。條件變數要和互斥量相聯結,以避免出現條件競爭 乙個執行緒預備等待乙個條件變數,當它在真正進入等待之前,另乙個執...