我创建了一个专门用于 libuv 循环的新线程。线程函数看起来像这样:
void thread_function()
{
uv_loop_t *loop = uv_loop_new();
uv_ref( loop );
uv_run( loop );
}
通过增加引用计数器,线程能够保持存活状态并处理libuv事件。我希望通过在主线程上执行 uv_unref
来导致运行循环结束从而使线程退出。
然而,在检查 uv_ref
源代码时,我没有看到任何保证在并发访问期间对引用计数变量的访问将被同步。此外,在运行循环期间,我没有看到任何yield调用以放弃控制权给操作系统,这意味着程序将不会与其他进程很好地协作。
这让我相信我没有正确使用libuv。如果有人能解释一下我做错了什么,那就太好了!