gpt4 book ai didi

c++ - 从 io_context 中删除工作或使用多个 io_context 对象

转载 作者:可可西里 更新时间:2023-11-01 17:59:06 25 4
gpt4 key购买 nike

目前,我正在尝试将通过 postdispatch 排队的工作移除到 io_context 中。工作由少量队列组排队,这些工作应立即全部移除:

boost::asio::io_context context;

auto work = [] {
// ...
};
boost::asio::post(context, std::move(work));

// ... now I want to remove the work

asio库有没有提供这样的功能?

目前我正在处理的应用程序正在使用一个从多个线程调用 io_context::run() 的线程池。

我的想法是我可以创建多个由线程池分派(dispatch)的 io_context,这样一个 io_context 代表一个可以通过 io_context 删除的组::停止()。所有 io_context 都将保存在一个列表中,然后汇集到未完成的事件中。

但是我认为合并或等待许多 io_context 可能会导致性能问题。有不同的解决方案吗?

最佳答案

不,没有从 io_context 中删除发布的工作的机制。或者,您可以修改您的作业以检查在它们运行之前是否设置了“取消标志”(未经测试):

// create a cancellation flag
const auto cancel = std::make_shared<std::atomic<bool> >();

auto work = [=] {

// check to see if the flag has been set
// if so, return without performing our task
if(*cancel)
return;

// perform some task
};

// post our job
boost::asio::post(context, std::move(work));

...

// cancel all jobs checking this flag
*cancel = true;

关于c++ - 从 io_context 中删除工作或使用多个 io_context 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50431352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com