屏障(UNIX环境高级编程笔记)

  屏障(barrier)是用户协调多个线程并行工作的同步机制。屏障允许每个线程等待,直到所有的合作线程都到达某一点,然后从该点继续执行。
  屏障允许任意数量的线程等待,知道所有的线程完成处理工作,而线程不需要退出。所有线程到达屏障之后可以接着工作。
  可以使用pthread_barrier_init函数对屏障进行初始化,用pthread_barrier_destroy函数进行反初始化。

#include <pthread.h>
int pthread_barrier_init(pthread_barrier_t *restrict barrier,
            const pthread_barrierattr_t *restrict attr,
            unsigned int count);
int pthread_barrier_destroy(pthread_barrier_t *barrier);
                    两个函数的返回值:若成功,返回0;否则,返回错误编号

  初始化屏障时,可以使用count参数指定,在允许所有线程继续运行之前,必须到达屏障线程数目。使用attr参数指定屏障对象的属性,置空时为默认属性。
  可以使用pthread_barrier_wait函数来表明线程已完成工作,准备等所有的其他线程赶上来。

#include <pthread.h>
int pthread_barrier_wait(pthread_barrier_t *barrier);
    返回值:若成功,返回0或者PTHREAD_BARRIER_SERIAL_THREAD;否则,返回错误编号

  调用pthread_barrier_wait的线程在屏障计数未满足条件时,会进入休眠状态。如果该线程时最后一个调用pthread_barrier_wait的线程,就满足了屏障计数,所有的线程都会被唤醒。
  一旦达到屏障计数值,而且线程处于非阻塞状态,屏障就可以被重用。但是除非在调用了pthread_barrier_destroy函数之后,又调用了pthread_barrier_init函数对计数调用另外的函数进行初始化,否则屏障计数不会改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值