2016-03-30 3 views
3

Так что я знаю, что вы можете создавать барьеры в C для управления потоком многопоточной программы. Вы можете инициализировать барьер, использовать ваши потоки, а затем уничтожить его. Однако я не уверен, можно ли повторить использование одного и того же барьера (скажем, если бы он был в цикле). Или вы должны использовать новый барьер для второй точки ожидания? В качестве примера приведен правильный код (повторное использование одного и того же барьера)?Являются ли барьеры Pthread в C многоразовыми?

#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

Какова была функция, возвращаемая 'pthread_barrier_init'? И другие функции? –

+0

Барьер не управляет потоком, а является точкой синхронизации. Программный поток управляется условными операторами и т. Д. – Olaf

ответ

6

Да, они многоразовые. man page says:

Когда требуемое число потоков назвали pthread_barrier_wait() ... барьер должен быть сбрасывается в состояние, было в результате последней функции pthread_barrier_init(), который ссылается его.

Смежные вопросы