【问题标题】:How to query the number of completion handlers waiting on a strand in Boost ASIO?如何查询 Boost ASIO 中等待链上的完成处理程序的数量?
【发布时间】:2021-11-07 12:34:20
【问题描述】:

有没有一种简单的方法来确定等待特定 Boost ASIO 链的完成处理程序的数量?我知道,该数字仅在多线程环境中是近似的,因为它总是会发生,完成处理程序在该计数器被查询后的纳秒内完成,但在计数器返回之前。或者,同样地,其他线程可以在查询计数器后将新工作发布到该链。

但是这样一个大概的数字对于我的应用来说已经足够了。

我知道,我可以在我的应用程序中添加一个std::atomic<std::size_t> 变量,每当有内容发布到链时,该变量就会递增,并且由每个完成处理程序递减,该变量会在该链中执行。但是对于有时会被取消的计时器和有时会意外关闭的异步套接字,我很担心这种基于应用程序的计数器很容易不同步。那么,有没有一种简单的方法可以“询问 ASIO 本身”,有多少工作正在等待特定的链?

【问题讨论】:

    标签: c++ multithreading asynchronous boost-asio


    【解决方案1】:

    没有办法。请记住,链就像哈希桶:队列可以(并且将)在不同的链之间共享,超出合理数量的唯一链。

    我认为对于执行程序,我怀疑可以轻松地创建一个跟踪 on_work_started/on_work_finished 调用的执行程序。我没有这样的例子,但我很肯定我在库示例/测试中看到过一个或多个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 2020-05-22
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多