跟刘峰六学C语言(5) 线程栅栏

来源:互联网 发布:java sleep用法 编辑:程序博客网 时间:2024/06/05 22:34

某些并行计算需要面临某些在计算进行前的某些单通瓶颈点,这种情况下,当然可以使用信号量的方式来进行处理,但是还存在着另外的一种处理方式是更加方便的,它就是:栅栏(在pthread库里面被定义成为类型 pthread_barrier_t),下面我们来看一段程序作为示例

 

这段程序产生出许多个线程,并且分配给每个线程计算矩阵乘法的一部分,然后每个线程使用这次计算的结果,继续进行下一步的计算:另一个矩阵的乘法

几点关于API的说明:

  1. barrier 变量必须在最开始声名为全局变量
  2. barrier 变量的初始化必须在main函数里进行初始化
  3. 在点上每一个线程都会等待它的对端完成工作
注意

在程序顶部的宏定义 _XOPEN_SOURCE 是非常重要的;如果没有这个变量,那么barrier类型就会在pthread.h中被屏蔽掉,这个定义必须在所有的头文件引用之前被定义出来

原创粉丝点击