Являются ли барьеры Pthread в C многоразовыми?

Итак, я знаю, что вы можете создавать барьеры в 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);
}

1 ответ

Да, они многоразовые. На странице руководства написано:

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

Другие вопросы по тегам