1. 简介
Barrier是线程栅栏类。这是一个对于线程同步颇为重要的阻塞器接口,它的构造函数与BlockCount 类似,可以设置一个整数值,我们可以把这个值理解成栅栏的“强度”。每个执行了Barrier::block()函数的线程都将被阻塞;当被阻塞在栅栏处的线程达到指定的数目时,就好比栅栏无法支撑那么大的强度一样,栅栏将被冲开,所有的线程将被释放。重要的是,这些线程是几乎同时释放的,也就保证了线程执行的同步性。
注意 BlockCount 与Barrier 的区别,前者是由其它任意线程执行指定次数的completed()
函数,即可释放被阻塞的线程;而后者则是必须阻塞指定个数的线程之后,所有的线程才会
同时被释放。
2. 实现
Barrier提供的接口并不多,主要有:
- 构造函数:构造一个可以阻止numThreads的栅栏(Barrier)
Barrier(int numThreads=0);
- 声明一个线程已经到达栅栏处
virtual void block(unsigned int numThreads=0);
Barrier的作用效果如下图所示:
3. 示例程序
可以参考 1. OpenThreads使用-Barrier中的示例程序
本文介绍了线程同步机制Barrier的概念及其实现原理。Barrier是一种重要的阻塞器接口,用于确保多个线程同步执行。文章解释了Barrier与BlockCount的区别,并通过示例程序展示了其用法。

4467

被折叠的 条评论
为什么被折叠?



