我使用 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);
}
}
在遇到第一个障碍之前它运行良好,但看起来障碍没有重置,一旦所有线程遇到它,我就尝试重新初始化,但效果很奇怪。