2016-03-30 18 views
3

Also ich weiß, dass Sie Barrieren in C erstellen können, um den Ablauf eines Thread-Programms zu steuern. Du kannst die Barriere initialisieren, deine Threads verwenden und sie dann zerstören. Ich bin mir jedoch nicht sicher, ob die gleiche Barriere wiederverwendet werden kann (wenn sie in einer Schleife wäre). Oder müssen Sie eine neue Barriere für einen zweiten Wartepunkt verwenden? Als Beispiel, ist der folgende Code korrekt (die gleiche Barriere wiederverwenden)?Sind Pthread-Barrieren in C wiederverwendbar?

#include <pthread.h> 
pthread_barrier_t barrier; 

void* thread_func (void *not_used) { 
    //some code 
    pthread_barrier_wait(&barrier); 
    //some more code 
    pthread_barrier_wait(&barrier); 
    //even more code 
} 

int main() { 
    pthread_barrier_init (&barrier, NULL, 2); 
    pthread_t tid[2]; 
    pthread_create (&tid[0], NULL, thread_func, NULL); 
    pthread_create (&tid[1], NULL, thread_func, NULL); 
    pthread_join(tid[0], NULL); 
    pthread_join(tid[1], NULL); 
    pthread_barrier_destroy(&barrier); 
} 
+0

Welcher Funktionswert wurde von 'pthread_barrier_init' zurückgegeben? Und die anderen Funktionen? –

+0

Eine Barriere steuert nicht den Fluss, sondern ist ein Synchronisationspunkt. Der Programmablauf wird durch bedingte Anweisungen usw. gesteuert. – Olaf

Antwort

6

Ja, sie sind wiederverwendbar. Die man page says:

Wenn die erforderliche Anzahl von Threads haben pthread_barrier_wait genannt() ... wird die Barriere wieder auf den Zustand sei es als Ergebnis der jüngsten pthread_barrier_init() Funktion hatte, die sie referenziert.