Mám viacero vlákien a chcem, aby každé vlákno čakalo na dokončenie všetkých ostatných v určitom bode kódu a potom pokračovalo nasledujúcim spôsobom:
void *run() {
for (i=0;i<1000;i++){
do_1st();
// sync() all stop here wait for all then resume
do_2nd();
}
}
Snažil som sa použiť pthread_cond_wait .. ale zdá sa to veľmi komplikované.
Je na to ľahké čakať?
Ďakujem
odpovede:
5 pre odpoveď č. 1Môžete použiť a pthread_barrier, inicializujte ho pred spustením vlákien a nastavte count
k č. vlákien, ktoré používajú vašu slučku, napríklad ak máte 8 vlákien:
pthread_barrier_init(&my_barrier,NULL,8);
Závitová slučka sa teraz stáva
void *run() {
for (i=0;i<1000;i++){
do_1st();
pthread_barrier_wait(&my_barrier);
do_2nd();
}
}