C 螺纹永久堵塞在屏障上

C 螺纹永久堵塞在屏障上,c,pthreads,barrier,pthread-barriers,C,Pthreads,Barrier,Pthread Barriers,我正在做一项作业,涉及到各种线程同步机制的使用,但唯一让我头疼的是pthread_barrier__t 其想法是将屏障作为几个线程的检查点来实现,但它们会永久阻塞 我在这里检查了一些答案,我的实现似乎是正确的,即使编译和运行时没有任何问题 cpu.c包含主线程: #include <pthread.h> #include "../include/cpu.h" #include "../include/units.h" pthread_barrier_t barrier; void

我正在做一项作业,涉及到各种线程同步机制的使用,但唯一让我头疼的是pthread_barrier__t

其想法是将屏障作为几个线程的检查点来实现,但它们会永久阻塞

我在这里检查了一些答案,我的实现似乎是正确的,即使编译和运行时没有任何问题

cpu.c包含主线程:

#include <pthread.h>
#include "../include/cpu.h"
#include "../include/units.h"

pthread_barrier_t barrier;

void cpu_boot() {
  pthread_barrier_init(&barrier, NULL, 2));
}

void *cpu_thread() {
  pthread_t unit1_thread;
  pthread_t unit2_thread;
  pthread_create(&unit1_thread, NULL, &unit1_func, NULL);
  pthread_create(&unit2_thread, NULL, &unit2_func, NULL);

  (...)

  pthread_join(unit1_thread, NULL);
  pthread_join(unit2_thread, NULL);

  pthread_exit(0);
}
units.c包含其他线程的函数:

#include <pthread.h>
#include "../include/units.h"
#include "../include/cpu.h"

void *unitN_func() {

  (...)

  pthread_barrier_wait(&barrier);
  pthread_exit(0);
}
一些注意事项:

我引用的两个文件都有自己的头文件 我小心地删除了一些代码片段以使其更短 不管怎样,函数体大部分都是空的,我正在等待屏障工作 还删除了错误检查,以保持代码简短,执行时无错误 屏障计数反映移除了几个线程 屏障在cpu上外部 谢谢

你有没有叫过cpu_boot?否则,您的屏障将永远不会初始化,因此您很可能正在调用未定义的行为。您可能应该修改您发布的代码,使其成为一个新的应用程序。您现在发布的内容显示了一些结构,但除此之外,它并没有多大用处。。。