1

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

谢谢!

4

0 回答 0