#include <iostream>
#include <thread>
#include <queue>
#include <condition_variable>
#include <assert.h>
#define MAX_CAPACITY 20
std::queue<int> commodity;//商品
std::mutex x;
std::condition_variable cv;
std::condition_variable cv2;
int i = 0;
void preduce() {
while (1) {
std::unique_lock<std::mutex> lck(x);
while (i == MAX_CAPACITY) {
cv2.wait(lck);
}
i++;
cv.notify_all();
std::cout << "preduce " << i << std::endl;
}
}
void consumption() {
while (1) {
std::unique_lock<std::mutex> lck(x);
while (i == 0) {
cv.wait(lck);
}
i--;
cv2.notify_all();
std::cout << "consumption " << i << std::endl;
}
}
int main() {
std::thread thread_preduce(preduce);
std::thread thread_consumption(consumption);
std::cout << "preduce&consumtion test!" << std::endl;
thread_consumption.join();
thread_preduce.join();
return 0;
}