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