/ / posix synchronizácia vlákien zastaví na rovnakom kóde - c ++, c, multithreading, posix

posix zastavenie synchronizácie vlákien na rovnakom kóde - c ++, c, multithreading, posix

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ď č. 1

Môž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();
}
}