/ Synchronizacja wątku / posix zatrzymuje się przy tym samym kodzie - c ++, c, wielowątkowość, posix

synchronizacja wątku posix zatrzymuje się na tym samym kodzie - c ++, c, wielowątkowość, posix

Mam wiele wątków i chcę, aby każdy wątek czekał na zakończenie wszystkich pozostałych w pewnym punkcie kodu, zanim wykona następujące czynności:

void *run() {
for (i=0;i<1000;i++){
do_1st();
// sync() all stop here wait for all then resume
do_2nd();
}
}

Próbowałem użyć pthread_cond_wait .. ale wydaje się to bardzo skomplikowane.

Czy jest na to jakieś łatwe oczekiwanie?

Dziękuję Ci

Odpowiedzi:

5 dla odpowiedzi № 1

Możesz użyć a pthread_barrier, zainicjuj go przed rozpoczęciem wątków i ustaw count na nie. wątków, które uruchamiają pętlę, np. jeśli masz 8 wątków:

pthread_barrier_init(&my_barrier,NULL,8);

Pętla wątku staje się teraz

void *run() {
for (i=0;i<1000;i++){
do_1st();
pthread_barrier_wait(&my_barrier);
do_2nd();
}
}