#include <iostream>
#include <string>
#include <thread>
#include <mutex>
#include <vector>
using namespace std;
int i;
mutex mut;
class A {
private:
condition_variable mycond;
public:
void InVec()
{
while (1)
{
unique_lock<mutex> sbguard1(mut);
i++;
cout << "push into" << i << endl;
chrono::milliseconds dura(1000);
this_thread::sleep_for(dura);
mycond.notify_one();
}
}
void OutVec()
{
while (1)
{
unique_lock<mutex> sbguard1(mut);
mycond.wait(sbguard1, [this]
{
if (i != 0)
return true;
else
return false;
});
i--;
cout << "pop out" << i << endl;
chrono::milliseconds dura(400);
this_thread::sleep_for(dura);
}
}
};
A a1;
int main()
{
i = 0;
thread t1(&A::InVec, &a1);
thread t2(&A::OutVec, &a1);
t1.join();
t2.join();
}