#include <queue>
#include <condition_variable>
#include <mutex>
#include <thread>
#include <windows.h>
using namespace std;
queue<int> buffer;
condition_variable m_notFull;
condition_variable m_notEmpty;
mutex mtx;
void produceItem()
{
unique_lock<mutex> lock(mtx);
while (buffer.size() > 20)
{
std::cout << "buffer is full" << std::endl;
m_notFull.wait(lock);
}
buffer.push(1);
std::cout << "procude item" << std::endl;
m_notEmpty.notify_all();
}
void consumeItem()
{
unique_lock<mutex> lock(mtx);
while (buffer.empty())
{
std::cout << "buffer is empty" << std::endl;
m_notEmpty.wait(lock);
}
buffer.pop();
std::cout << "consume item" << std::endl;
m_notFull.notify_all();
}
void produce()
{
while (1)
{
Sleep(1);
produceItem();
}
}
void consume()
{
while (1)
{
Sleep(1);
consumeItem();
}
}
int main()
{
thread t(produce);
thread t1(consume);
getchar();
return 0;
}