Jak zsynchronizować proces z losową liczbę aktywnych wątków?

głosy
0

Mam następujący problem. Mój proces spawns 4 wątki, które wykonują te same zadania niezależnie i trzeba czekać na wszystkie z nich, aby zakończyć przetwarzanie przed przejściem do następnego przetwarzania iteracji. Jednakże liczba aktywnych gwintu, czyli liczba wątków przetwarzania danych, i które muszą czekać, aż do zakończenia innych zmienia się od 1 do 4. Na przykład, kilka razy 2 nici przetwarza dane i muszą czekać wzajemnie przed kontynuowaniem.

Ja przeczytałem, że bariery mógłby zrobić dla mnie jednak, gdy są one tworzone Muszę określić liczbę wątków czekać, co nie jest z mojej aplikacji. Dodatkowo, ze względu na sposób, w jaki aplikacja została wdrożona, byłoby niewygodne i złożone, aby zachować tworzenia / zniszczenia Bariery za każdym razem.

Zastanawiałem się, czy istnieje inny sposób na rozwiązanie tego problemu.

Dzięki!

Utwórz 18/12/2018 o 11:02
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

W ten sposób można to osiągnąć za pomocą semaforów.

// Global Sempahore initialized to zero.
Sempahore global_sempahore(0)

// Your main thread which spawns your 'n' worker thraeds.
// After spawning 'n' threads your main thread will wait for those threads to finish.
for (int i=0; i<n; i++) {
    global_sempahore.sem_wait();
}


// This is your worker thread routine.
// After processing the common work routine before exiting each thread will signal the sempahore.
global_sempahore.sem_post();

Chodzi o to zainicjować sempahore w trybie zablokowanym 0. Po tarle swoich n wątków roboczych w głównym wątku czekać na sempahore dla n razy.

W wątku roboczego tuż przed wyjściem sygnał semafora.

Zapewni to, że główny wątek będzie obudzić się dopiero wtedy, gdy wszystkie n wątki zakończeniu wykonywania.

Odpowiedział 20/12/2018 o 06:12
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more