我正在处理一项涉及使用各种线程同步机制的任务,但唯一让我头疼的是 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.h 上
谢谢!