Utworzyłem nowy wątek poświęcony pętli uruchamiania libuv. Funkcja wątku wygląda mniej więcej tak:Czy wątek libuv jest bezpieczny?
void thread_function()
{
uv_loop_t *loop = uv_loop_new();
uv_ref(loop);
uv_run(loop);
}
Przyrost licznika ref utrzymuje wątek przy życiu i jest w stanie do przetwarzania zdarzeń libuv. Mam nadzieję, że uda mi się zakończyć pętlę uruchamiania, powodując wyjście wątku, wykonując uv_unref
w głównym wątku.
Jednak podczas sprawdzania kodu źródłowego uv_ref
nie widziałem żadnej gwarancji, że dostęp do zmiennej licznika odniesienia zostanie zsynchronizowany podczas dostępu równoczesnego. Dodatkowo nie widziałem żadnych wywołań wydajności w celu rezygnacji z kontroli systemu operacyjnego podczas pętli uruchamiania, co oznacza, że program nie będzie współpracował dobrze z innymi procesami.
To prowadzi mnie do przekonania, że nie używam libuv we właściwy sposób. Jeśli ktoś mógłby wyjaśnić, co robię źle, byłoby wspaniale!