C-如何以线程安全的方式使用libuv async处理



uv_async_send是线程安全,但 uv_async_init不是。如果我使用 uv_async_init在循环的线程中创建一个异步句柄,则可以多次调用uv_async_send,但是它的回调只会被调用一次。我需要将回调称为与uv_async_send相同的次数。

但是,当我为另一个线程中的每个回调创建一个异步句柄时,这并不安全。那么,我如何以线程安全的方式使用libuv async句柄?

  1. 在循环的线程中创建一个单个异步句柄。
  2. 实现线程安全队列。(libuv不会在其API中暴露一个,但它确实暴露了原始图,例如创建一个,例如uv_mutex_t
  3. 其他线程将项目放在线程安全呼叫中,然后立即致电uv_async_send
  4. 异步回调删除了队列中的所有待处理项目并处理它们。

uv_async_init不是线程安全的……当我为其他线程中的每个回调创建异步句柄时,这是不安全的……我可以在loop的线程中创建一个异步句柄

看来您误解了术语螺纹安全。这并不意味着您不得从循环线程以外的线程调用uv_async_init()。这只是意味着您不得从多个线程并行称呼它(不互锁)。

相关内容

  • 没有找到相关文章

最新更新