#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void print_id(int id) {
std::unique_lock<std::mutex> lck(mtx);
// 等待条件变量,直到 ready 变为 true
cv.wait(lck, []{return ready;});
// 打印线程 ID
std::cout << "thread " << id << '\n';
}
void go() {
std::this_thread::sleep_for(std::chrono::seconds(1)); // 模拟一些准备工作
std::lock_guard<std::mutex> lck(mtx);
ready = true;
cv.notify_all(); // 通知所有等待的线程
}
int main() {
std::thread threads[10];
// 启动多个线程
for (int i = 0; i < 10; ++i)
threads[i] = std::thread(print_id, i);
// 启动一个线程来设置 ready 标志
std::thread(go).detach();
// 等待所有线程完成
for (auto& th : threads) th.join();
return 0;
}
std::condition_variable 用于线程间的同步,允许一个或多个线程等待某个特定条件的发生。std::mutex 用于保护共享资源,确保同一时间只有一个线程可以访问该资源。cv.wait() 进入等待状态,直到另一个线程调用 cv.notify_all() 或 cv.notify_one() 来唤醒它们。cv.wait(lck, []{return ready;}) 中的 lambda 表达式用于检查条件是否满足,只有当条件为真时才会继续执行。std::thread 创建并管理多个线程,join() 用于等待线程结束。上一篇:c++printf保留两位小数
下一篇:c++ mqtt
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站