cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>
using namespace std;
mutex mtx;
condition_variable cv;
bool ready = false;
void thread_A(int id)
{
unique_lock<mutex> lck(mtx);
cv.wait(lck); // 等待条件变量 ,线程被挂起
cout << "Thread " << id << " is waitting\n";
while (!ready) int m=1; /*cv.wait(lck);*/ // 等待条件变量
cout << "Thread " << id << " is running\n";
}
void thread_B()
{
cout << "Initializing...\n";
this_thread::sleep_for(chrono::milliseconds(2000)); // 模拟初始化过程
{
{
lock_guard<mutex> lck(mtx); // 自动加锁互斥量
ready = true; // 设置条件变量
}
cout << "Initialization complete\n";
cv.notify_all(); // 唤醒所有等待的线程
this_thread::sleep_for(chrono::milliseconds(2000)); // 模拟初始化过程
cout << "All thread Initialization complete\n";
}
/* this_thread::sleep_for(chrono::milliseconds(2000));
cout << "Initialization complete2\n";*/
}
int main()
{
thread t1(thread_A, 1);
thread t2(thread_A, 2);
thread t3(thread_A, 3);
thread t4(thread_B);
t1.join();
t2.join();
t3.join();
t4.join();
}
运行结果:
cpp
Initializing...
Initialization complete
Thread 2 is waitting
Thread 2 is running
Thread 1 is waitting
Thread 1 is running
Thread 3 is waitting
Thread 3 is running
All thread Initialization complete