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 № 1Moż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();
}
}