我正在完成一项涉及使用各种线程同步机制的任务,但唯一让我头疼的是pthread_barrier_t。
我们的想法是将屏障作为几个线程的检查点来实现,但它们会永久阻塞。
我在这里查了几个答案,我的实现似乎是正确的,甚至编译并运行this simple one没有任何问题。
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 (包含其他主题&#39;函数):
#include <pthread.h>
#include "../include/units.h"
#include "../include/cpu.h"
void *unitN_func() {
(...)
pthread_barrier_wait(&barrier);
pthread_exit(0);
}
一些注意事项:
谢谢!