如题,直接上代码:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex m; // 互斥量
std::condition_variable cv; // 条件变量
bool isPrintA = true; // 控制打印A还是B
int main()
{
auto printA = [&](int x){
for (int i = 0; i < x; i++)
{
std::unique_lock<std::mutex> lk(m);
cv.wait(lk, []{return isPrintA;}); // 等待线程,知道被通知唤醒线程且符合打印条件
std::cout << "A" << std::endl; // 这个线程一直打印A
isPrintA = false; // 控制变量,让线程B打印
cv.notify_one(); // 随机唤醒一个等待的线程
}
};
auto printB = [&](int x){
for (int i = 0; i < x; i++)
{
std::unique_lock<std::mutex> lk(m);
cv.wait(lk, []{return !isPrintA;});// 等待线程,知道被通知唤醒线程且符合打印条件
std::cout << "B" << std::endl; // 这个线程一直打印B
isPrintA = true; // 控制变量,让线程A打印
cv.notify_one(); // 随机唤醒一个等待的线程
}
};
std::thread tA(printA, 10);
std::thread tB(printB, 10);
tA.join();
tB.join();
return 0;
}