Являются ли барьеры 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(), которая ссылалась на него.