#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 時 等待條件,掛起執行緒直到其他執行緒觸發條件。條件變數要和互斥量相聯結,以避免出現條件競爭 乙個執行緒預備等待乙個條件變數,當它在真正進入等待之前,另乙個執...