C 螺纹永久堵塞在屏障上
我正在做一项作业,涉及到各种线程同步机制的使用,但唯一让我头疼的是pthread_barrier__t 其想法是将屏障作为几个线程的检查点来实现,但它们会永久阻塞 我在这里检查了一些答案,我的实现似乎是正确的,即使编译和运行时没有任何问题 cpu.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
#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?否则,您的屏障将永远不会初始化,因此您很可能正在调用未定义的行为。您可能应该修改您发布的代码,使其成为一个新的应用程序。您现在发布的内容显示了一些结构,但除此之外,它并没有多大用处。。。