c++标准库提供条件变量以及期值等工具来等待事件以及简化操作的同步。
std::this_thread::sleep_for(std::chrono::milliseconds(100)); //当前线程休眠100毫秒
使用std::condition_variable条件变量等待数据
int data_num = 10;
std::queue<int> data;
std::mutex my_mutex;
std::condition_variable data_cond;
void preparation_data() {
while (data_num) {
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
std::lock_guard<std::mutex> my_lock(my_mutex);
data.push(data_num--);
data_cond.notify_one(); //另可使用.notify_all()通知所有执行wait()的线程检查其等待中的条件
}
}
void processing_data() {
while (true) {
std::unique_lock<std::mutex> my_lock(my_mutex);
data_cond.wait(my_lock, [] {return !data.empty();});
std::cout << data.front() << std::endl;
data.pop();
my_lock.unlock();
if (!data_num) { //此处使用其实是有bug的,访问dat

本文探讨了C++标准库中的并发工具,包括std::condition_variable用于等待数据的同步,std::future用于等待一次性事件,以及std::packaged_task如何封装任务并保存结果到其内部的future。通过这些工具,可以更有效地管理并发操作中的同步问题。
最低0.47元/天 解锁文章
1037

被折叠的 条评论
为什么被折叠?



