Я работаю с 3 различными потоками (t0, t1 и t2), которым мне нужно синхронизировать поведение следующим образом:
Мой основной потокбудет создавать эти 3 потока, и они будут проходить через отпечатки и барьер, как я уже упоминал.
Я пытался написать функции, которые я им передаю (f0 для t0, f1 для t1 и т. д.):
pthread_barrier_t b; //in my main I initialize pthread_barrier_init(&b, NULL, 3);
void *f0(void *arg){
while(1){
printf("A\n");
pthread_barrier_wait(&b);
pthread_barrier_wait(&b);
printf("D\n");
}
}
void *f1(void *arg){
while(1){
pthread_barrier_wait(&b);
printf("B\n");
pthread_barrier_wait(&b);
}
}
void *f2(void *arg){
while(1){
pthread_barrier_wait(&b);
printf("C\n");
pthread_barrier_wait(&b);
}
}
Это работало хорошо, пока первый барьер не был преодолен, но казалось, что барьер не сбрасывается, я попытался повторно инициировать его, как только все потоки натолкнулись на него, но у него были странные эффекты.