#include <iostream>
#include <thread>
#include <condition_variable>
#include <queue>
std::mutex mtx;
std::condition_variable cv;
int signal_sym = 0;
struct MySturuct
{
int a;
};
std::queue<MySturuct>;
void PrintString_1()
{
std::unique_lock<std::mutex> lk(mtx);
int cnt = 0;
while (cnt < 10)
{
while (signal_sym != 0)
cv.wait(lk);
std::cout << std::this_thread::get_id() << " : " << "A" << std::endl;
signal_sym = 1;
cnt++;
cv.notify_one();
}
}
void PrintString_2()
{
std::unique_lock<std::mutex> lk(mtx);
int cnt = 0;
while (cnt < 10)
{
while (signal_sym != 1)
cv.wait(lk);
std::cout << std::this_thread::get_id() << " : " << "B" << std::endl;
signal_sym = 2;
cnt++;
cv.notify_one();
}
}
void PrintString_3()
{
std::unique_lock<std::mutex> lk(mtx);
int cnt = 0;
while (cnt < 10)
{
while (signal_sym != 2)
cv.wait(lk);
std::cout << std::this_thread::get_id() << " : " << "C" << std::endl;
signal_sym = 0;
cnt++;
cv.notify_one();
}
}
int main()
{
std::thread t1(PrintString_1);
std::thread t2(PrintString_2);
std::thread t3(PrintString_3);
t1.join();
t2.join();
t3.join();
return 0;
}
可以参考std::condition_variable notify_one()与notify_all()的区别_xupeng1644的博客-优快云博客,学习一下notify_one和notify_all;