ACE中的栅栏(Barrier)
来源:互联网 发布:智能手环推荐 知乎 编辑:程序博客网 时间:2024/05/01 22:14
一组线程可以使用栅栏来进行共同的相互同步。组中的线程各自执行,直到到达栅栏,就阻塞在那里。在所有相关线程到达栅栏后,它们就全部继续执行。
栅栏在ACE_Barrier类中实现,在实例化时,将要等待的线程数目作为参数传入,一旦到达栅栏点,线程调用wait方法阻塞,当其他线程也到达栅栏点时,再一起继续执行。
#include "ace/Thread.h"
#include "ace/Synch.h"
#include "ace/Log_Msg.h"
static int number = 0;
static int seed = 0;
class Args{
public:
Args(ACE_Barrier *pBarrier):_pBarrier(pBarrier){}
ACE_Barrier *_pBarrier;
};
static void* worker(void* arguments)
{
Args *arg = (Args *)arguments;
ACE_DEBUG((LM_DEBUG,"【%t】thread begin work\n"));
::number++;
ACE_OS::sleep(ACE_OS::rand()%2);
ACE_DEBUG((LM_DEBUG,"【%t】thread end work\n"));
ACE_DEBUG((LM_DEBUG,"【%t】thread exiting\n"));
arg->_pBarrier->wait();
return 0;
}
int main(int argc,char *argv[])
{
int nThreads = 5;
ACE_Barrier barrier(nThreads);
Args arg(&barrier);
ACE_OS::srand(::seed);
for(int i=0;i<5;i++)
{
if(ACE_Thread::spawn((ACE_THR_FUNC)worker,(void*)&arg,THR_DETACHED|THR_NEW_LWP)==-1)
ACE_DEBUG((LM_DEBUG,"create threads [%d]\n error\n"));
}
barrier.wait();
ACE_OS::sleep(2);
ACE_DEBUG((LM_DEBUG,"【%t】other threads are finished.Program exit..\n"));
return 0;
}
- ACE中的栅栏(Barrier)
- java并发之同步工具类三之栅栏Barrier
- JAVA中的内存栅栏
- FFT中的栅栏效应
- OpenThread中的condition和barrier
- Barrier
- 围在栅栏中的爱
- 栅栏
- kfifo 一读一写无锁缓冲区中的memory barrier
- #define barrier() __volatile__("": : :"memory") 中的memory
- 多核并行编程中的内存栅栏
- ACE中的inline
- ACE中的Share MEM
- ACE中的设计模式
- ACE中的一些陷阱
- ACE中的精确定时器
- ACE中的进程
- ACE中的单例
- 去哪学习使用Git版本控制系统
- 程序员水平分级 你属于哪一类? 后谈
- 象牙塔里需要追求好的代码质量吗?
- Linux学习路线
- MyEclipse Hibernate 映射表配置文件详解
- ACE中的栅栏(Barrier)
- 关于ios中的setNeedsDisplay和setNeedsLayout
- 建议的程序员学习LDA算法的步骤
- 汇编弱智错误
- 疑惑
- warning LNK4042: The same object file was specified more than once
- ACM
- 大数运算经典:棋盘上的米粒。
- LaTeX命令速查手册1