线程永久阻挡屏障

时间:2015-04-20 16:07:26

标签: c pthreads barrier pthread-barriers

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

一些注意事项:

  • 我引用的两个文件都有自己的头文件
  • 小心地删除了一些代码以缩短代码
  • 无论如何,功能体大部分都是空的,我正在等待屏障工作
  • 还删除了错误检查以保持代码简短(执行时没有错误)
  • 屏障计数反映了删除几个线程
  • 屏障在cpu.h上被删除。

谢谢!

0 个答案:

没有答案