std::mutex mut;
std::queue<data_chunk> data_queue;
std::condition_variable data_cond;
void data_preparation_thread()
{
while(more_data_to_prepare())
{
data_chunk const data=prepare_data();
std::lock_guard<std::mutex> lk(mut);
data_queue.push(data);
data_cond.notify_one();
}
}
void data_processing_thread()
{
while(true)
{
std::unique_lock<std::mutex> lk(mut);
data_cond.wait(lk,[]{return !data_queue.empty();});
data_chunk data=data_queue.front();
data_queue.pop();
lk.unlock();
process(data);
if(is_last_chunk(data))
break;
}
}
std::condition_variable使用案例
最新推荐文章于 2025-04-15 18:13:41 发布
该博客探讨了使用C++标准库中的`std::mutex`、`std::queue`和`std::condition_variable`进行数据预处理和处理的线程安全实现。数据准备线程负责生成数据并将其放入队列,而数据处理线程则从队列中取出数据进行处理,当所有数据处理完毕后,处理线程退出。
614

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



