【发布时间】:2019-10-27 13:07:22
【问题描述】:
我使用 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);
}
}
在遇到第一个障碍之前它运行良好,但看起来障碍没有重置,我尝试在所有线程遇到它时重新初始化,但效果很奇怪。
【问题讨论】:
-
你应该展示剩下的代码
-
我认为您需要 2 个不同的屏障变量(b1、b2)。您还需要使用 pthread_barrier_init 真正初始化它们。
-
这是我所做的,效果很好。
标签: c multithreading loops pthread-barriers