題目:有生產者在生產產品,這些產品將提供給若干個消費者去消費,為了使生產者和消費者能併發執行,在兩者之間設定乙個有多個緩衝區的緩衝池,生產者將它生產的產品放入乙個緩衝區中,消費者可以從緩衝區中取走產品進行消費,所有生產者和消費者都是非同步方式執行的,但它們必須保持同步,即不允許消費者到乙個空的緩衝區中取產品,也不允許生產者向乙個已經裝滿產品且尚未被取走的緩衝區中投放產品。
假設條件:
1.有5個生產者,每1s生產1件商品
2.有5個消費者,每1s消費1件商品
3.緩衝池大小為5
4.生產者一共生產100件商品後結束
#include #include #include #include #include #include using namespace std;
class cthreaddemo
if(m_ngen > 100)
cout << "p :" << m_ngen << endl;
m_data.push_back(m_ngen);
lck.unlock();
m_cv.notify_all();
// 等待1s
std::chrono::milliseconds dura(1000);
std::this_thread::sleep_for(dura);}}
void consumethread()
while (m_data.empty())
int ndata = m_data.front();
m_data.pop_front();
cout << "c :" << ndata << endl;
lck.unlock();
std::chrono::milliseconds dura(15000);
std::this_thread::sleep_for(dura);}}
public:
cthreaddemo()
void start()
for (int i = 5; i < 10; i++)
for (auto& t : threads)
}};int main(int argc, char **argv)
生產者消費者問題
public class producer consumer class godown public godown int num public synchronized void produce int n catch interruptedexception e curr num n syste...
生產者 消費者問題
在學習程序互斥中,有個著名的問題 生產者 消費者問題。這個問題是乙個標準的 著名的同時性程式設計問題的集合 乙個有限緩衝區和兩類執行緒,它們是生產者和消費者,生產者把產品放入緩衝區,相反消費者便是從緩衝區中拿走產品。生產者在緩衝區滿時必須等待,直到緩衝區有空間才繼續生產。消費者在緩衝區空時必 須等待...
生產者 消費者問題
1 程序互斥問題 緩衝區b是臨界資源,程序p和c不能同時對b進行操作,即只能互斥的操作 2 程序同步問題 p不能往 滿 的的緩衝區b放產品,c不能從空的緩衝區獲得產品。當緩衝區滿時,c必須先於p執行,當緩衝區空時,p必須先於c執行 我們給出如下基於記錄型 二元 訊號量機制的解法 10 9 2013 ...