2010-10-18 11 views
1

J'ai plusieurs threads, et je veux chaque thread d'attendre tous les autres pour terminer à un certain moment dans le code avant de procéder comme suit:posix arrêt de la synchronisation des threads au même code

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

J'ai essayé d'utiliser pthread_cond_wait .. mais il semble très compliqué.

Est-il facile d'attendre pour faire cela?

Merci

+0

réponse barrière est correcte, mais vous pouvez également envisager d'utiliser les enveloppes de boost pour la facilité d'utilisation. –

Répondre

5

Vous pouvez utiliser un pthread_barrier, l'initialiser avant de commencer vos fils, et définissez le count au pas. des threads qui exécutent votre boucle. par exemple. si vous avez 8 fils de discussion:

pthread_barrier_init(&my_barrier,NULL,8); 

La boucle de fil devient maintenant

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

c'est exactement ce dont j'ai besoin! thx nos. btw dois-je détruire la barrière après utilisé? – w00d

+0

Vous devriez, oui - bien que si vous exécutez vos threads en plusieurs lots, vous pouvez les réutiliser. Si votre application se termine lorsque vous avez terminé ces calculs, elle sera nettoyée à la sortie du processus. – nos