OpenThreads库介绍——Barrier

1. 简介


Barrier是线程栅栏类。这是一个对于线程同步颇为重要的阻塞器接口,它的构造函数与BlockCount 类似,可以设置一个整数值,我们可以把这个值理解成栅栏的“强度”。每个执行了Barrier::block()函数的线程都将被阻塞;当被阻塞在栅栏处的线程达到指定的数目时,就好比栅栏无法支撑那么大的强度一样,栅栏将被冲开,所有的线程将被释放。重要的是,这些线程是几乎同时释放的,也就保证了线程执行的同步性。

注意 BlockCount 与Barrier 的区别,前者是由其它任意线程执行指定次数的completed()
函数,即可释放被阻塞的线程;而后者则是必须阻塞指定个数的线程之后,所有的线程才会
同时被释放。

2. 实现

Barrier提供的接口并不多,主要有:

  • 构造函数:构造一个可以阻止numThreads的栅栏(Barrier)
 Barrier(int numThreads=0);
  • 声明一个线程已经到达栅栏处
 virtual void block(unsigned int numThreads=0);

Barrier的作用效果如下图所示:

OpenThreads库介绍——Barrier_第1张图片

3. 示例程序

可以参考 1. OpenThreads使用-Barrier中的示例程序

4. 参考资料

1. OpenThreads使用-Barrier

你可能感兴趣的:(OpenGL和OSG基础)