BlockCount的使用,和Block类似。阻塞线程,使用block函数。释放线程,使用release函数。但是比Block多出来的功能是,使用completed函数,表示阻塞线程的东西少了一个。当阻塞线程的东西为0时,被BlockCount阻塞的线程才开始运行。
Barrier是线程栅栏类。这是一个对于线程同步颇为重要的阻塞器接口,它的构造函数与BlockCount 类似,可以设置一个整数值,我们可以把这个值理解成栅栏的“强度”。每个执行了Barrier::block()函数的线程都将被阻塞;当被阻塞在栅栏处的线程达到指定的数目时,就好比栅栏无法支撑那么大的强度一样,栅栏将被冲开,所有的线程将被释放。重要的是,这些线程是几乎同时释放的,也就保证了线程执行的同步性。
BlockCount 与Barrier 的区别,前者是由其它任意线程执行指定次数的completed()
函数,即可释放被阻塞的线程;而后者则是必须阻塞指定个数的线程之后,所有的线程才会
同时被释放。