linux barrier 栅栏屏障,让多任务在栅栏处集合,全部到齐后同时出发
概述
pthread_barrier_t 这是posix定义线程同步方法,不一定所有linux 版本中都实现了它。
barrier 是一种非常有效的线程同步方法,当我们需要几个线程一起开始时,或者在某个条件下需要一起等待时,
就需要有个类似栅栏一样的东西,条件成立时,就会被拦住。
当然这个功能,也可能通过管道,信号量,eventfd等方法实现,但是barrier非常简单高效。
接口
/* 头文件 */
#include <pthread.h>
/* 初始化接口 */
int pthread_barrier_init(pthread_barrier_t *restrict barrier,
const pthread_barrierattr_t *restrict attr, unsigned count);
/* 销毁接口,资源回收 */
int pthread_barrier_destroy(pthread_barrier_t *barrier);
/* 栅栏接口,调用者会阻塞,直到调用次数达到 count值后,所有阻塞都会放开 */
int pthread_barrier_wait(pthread_barrier_t *barrier);
接口说明
1.pthread_barrier_init接口会初始化所需资源;
如果attr传入为NULL时,采用默认值进行初始化;
count ,是指调用 pthread_barrier_wait多少次,才能成功返回;其值必须大于0 ;
只有返回成功,才是初始化完成;
返回码
EAGAIN 系统资源不足
EINVAL 非法入参,count必须大于0
ENOMEM 内存不足
2.pthread_barrier_destroy 接口销毁所有barrier上分配的资源
3.pthread_barrier_wait 会设置屏障栅栏,所有调用处都会被阻塞住,直到调用次数到达count值时,才会继续执行;
对于超过count的调用,不会被阻栏,那么它们有可能会先于栅栏阻塞的线程执行;这是由系统调度来决定的;
当调用达到count次数后,又会被重置;

浙公网安备 33010602011771号