i++) { pthread_join(watki[i], NULL);

// Zwolnienie zasobów bariery pthread_barrier_destroy(&bariera);

printf("Wszystkie wątki zakończyły pracę.\n"); return 0; }

Przykładowy wynik powyższego programu:

Wątek 1: Rozpoczynam etap 1... Wątek 2: Rozpoczynam etap 1... Wątek 0: Rozpoczynam etap 1... Wątek 0: Dotarłem do bariery i czekam. Wątek 1: Dotarłem do bariery i czekam. Wątek 2: Dotarłem do bariery i czekam. Wątek 2: Przekroczyłem barierę, zaczynam etap 2. Wątek 0: Przekroczyłem barierę, zaczynam etap 2. Wątek 1: Przekroczyłem barierę, zaczynam etap 2. Wszystkie wątki zakończyły pracę.

W powyższym wyniku programu można wyróżnić 3 sekcje. Wątki rozpoczynają działanie, czekają aż wszystkie osiągną barierę i na koniec kończą działanie. Konkretny wynik instrukcji w każdej z sekcji może się różnić. Konkretna kolejność wewnątrz poszczególnych etapów zależy od schedulera w jądrze systemu operacyjnego.

Zobacz też bariera pamięci

Przypisy

Kategoria:Programowanie równoległe