libuv実行ループ専用の新しいスレッドを作成しました。スレッド関数は次のようになります。
void thread_function()
{
uv_loop_t *loop = uv_loop_new();
uv_ref( loop );
uv_run( loop );
}
refカウンターのインクリメントにより、スレッドは存続し、libuvイベントを処理できる状態に保たれます。uv_unref
メインスレッドで実行することにより、実行ループを終了させ、スレッドを終了させることができるようにしたいと考えています。
ただし、uv_ref
ソースコードを調べたところ、同時アクセス中に参照カウンター変数へのアクセスが同期されるという保証はありませんでした。さらに、実行ループ中にオペレーティングシステムへの制御を放棄するためのyield呼び出しは見られませんでした。つまり、プログラムは他のプロセスとうまく連携しません。
これにより、私はlibuvを正しい方法で使用していないと信じるようになります。誰かが私が間違っていることを説明できれば、それは素晴らしいことです!