#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
std::mutex mymutex;
std::condition_variable cond;
int money;
/*子线程对money+*/
void thread1()
{
while (1)
{
std::unique_lock<std::mutex> mylock(mymutex);
while (money > 0)
{
/*等待子线程发送通知
wait的操作-> 解锁->等待(阻塞)
->等收到信号时成功返回->上锁
->函数流程往下走*/
cond.wait(mylock);/*条件变量和unilock配套使用*/
/*wait还有第二个参数*/
}
if (money == 0)
{
money += 200;
printf("money = %d\n", money);
}
/*可以自己手动解锁,比较灵活*/
mylock.unlock();
}
}
int main()
{
std::thread t1(thread1);
money = 1000;
while (1)
{
std::unique_lock<std::mutex> mylock(mymutex);
if (money > 0)
{
money -= 100;
printf("money = %d\n", money);
}
mylock.unlock();
if (money == 0)
{
/*发送通知*/
cond.notify_one();
}
}
return 0;
}
c++11条件变量condition_variable使用
最新推荐文章于 2024-03-11 08:52:07 发布