Так что я знаю, что вы можете создавать барьеры в 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);
}
Какова была функция, возвращаемая 'pthread_barrier_init'? И другие функции? –
Барьер не управляет потоком, а является точкой синхронизации. Программный поток управляется условными операторами и т. Д. – Olaf