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中的示例程序