`
glintstar
  • 浏览: 12548 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ACE 线程条件变量

    博客分类:
  • ACE
阅读更多
ACE_Condition类是针对OS条件变量原语的包装类。那么,到底什么是条件变量呢?

  线程常常需要特定条件被满足才能继续它的操作。例如,设想线程需要在全局消息队列里插入消息。在插入任何消息之前,它必须检查在消息队列里是否有空闲空间。如果消息队列在“满”状态,它就什么也不能做,而必须进行休眠,过一会再重试。就是说,在访问全局资源之前,某个条件必须为真。然后,当另外的线程空出消息队列时,应该有方法通知或发信号给原来的线程:在消息队列里有位置了,现在应该再次尝试插入消息。这可以使用条件变量来完成。条件变量不是被用作互斥原语,而是用作特定条件已经满足的指示器。

  在使用条件变量时,你的程序应该完成以下步骤:

获取全局资源(例如,消息队列)的锁(互斥体)。
检查条件(例如,消息队列里有空间吗?)。
如果条件失败,调用条件变量的wait()方法。等待在未来条件变为真。
当另一线程在全局资源上执行操作时,它发信号(signal())给所有其他在此资源上测试条件的线程(例如,另一线程从消息队列中取出一个消息,然后通过条件变量发送信号,以使阻塞在wait()上的线程能够再尝试将它们的消息插入队列)。
在醒来之后,重新检查条件现在是否为真。如为真,则在全局资源上执行操作(例如,将消息插入全局消息队列)
  需要特别注意的是,在阻塞在wait调用中之前,条件变量机制(也就是ACE_Cond)负责释放全局资源上的互斥体。如果没有进行此操作,将没有其他的线程能够在此资源上工作(该资源是条件改变的原因)。同样,一旦阻塞线程收到信号、重又醒来,它在检查条件之前会在内部重新获取锁。
用ACE_Thread::join()调用可以使主线程等待其他的线程结束。另一种达到同样目的的方法是使用条件变量,它使主线程在退出之前等待“所有线程已经结束”条件为真。最后一个线程可以通过条件变量发信号给等待中的主线程,通知它所有线程已经结束、而它是最后一个。随后主线程继续执行,退出应用并销毁进程。


ACE_Thread_Mutex mutex;

ACE_Condition<ACE_Thread_Mutex> cond(mutex);

主线程:
mutex.acquire();
while(number!=n_threads)
  cond.wait(); // 阻塞在该条件变量上
mutex.release();

其他线程:arg->cond_->signal(); //满足条件,发送信号


分享到:
评论

相关推荐

    VC++ ACE线程代码实例11例子

    源码实例包括 ...3 ACE_TSS模板的线程专有变量 4 创建线程和线程互斥 5 动态更换互斥方法 6 使用令牌互斥方法 7 守卫锁也是自动锁方法 8 条件等待 9 线程同步栅栏 10 主动对象创建任务 11 主动对象任务间通信

    ACE简介、SOCKET、线程、同步、事件等相关资料

    线程同步机制,如互斥锁、条件变量和信号量,是防止数据竞争和死锁的重要手段,ACE对这些原语进行了封装,使其易于使用。 同步是多线程编程中的另一个重要概念。ACE支持多种同步机制,包括互斥、读写锁、信号量和...

    整合ACE和ATL(多线程编程)

    确保在多线程环境中正确处理同步问题,如使用ACE的互斥锁或条件变量。 6. **测试与优化**:编写测试用例,验证多线程环境下的网络通信和COM组件交互是否正确。根据性能指标进行优化,如调整线程池大小,改进同步...

    ACE基本的多线程编程[文].pdf

    ACE,全称Adaptive Communication Environment,是一个开源的跨...此外,ACE还提供了许多其他高级并发机制,如条件变量、读写锁和屏障,以及用于线程间通信的队列和管道,这些工具极大地简化了复杂分布式系统的开发。

    ACE库入门(中文)

    例如,`ACE_Thread`模块提供了创建线程、设置和获取线程属性以及线程同步(如互斥锁、条件变量)等功能。 2. **进程管理**:ACE支持进程的创建、管理和通信,包括进程间通信(IPC)机制,如管道、共享内存和消息...

    ACE入门 编译 配置 中文版

    ACE还提供了多种锁,例如ACE_Lock,可以使用其acquire()和release()方法来控制线程对共享资源的访问顺序,防止出现竞态条件。 ACE还提供了异常处理机制,可以捕获和处理各种异常事件,确保通信软件的健壮性。此外,...

    ACE-5.6.zip ACE5.6官网源码

    7. **ACE_Synch**:这一模块提供了各种同步原语,如互斥量、条件变量、读写锁等,帮助开发者实现线程安全的代码。 8. **ACE_Time_Value**:ACE为时间值提供了专门的数据结构,支持时间间隔的计算和比较,方便在定时...

    linux下编译安装ACE

    最后,为了能在你的系统中全局使用ACE,需要更新环境变量。在`~/.bashrc`或`~/.bash_profile`中添加以下行: ```bash export PATH=$PATH:/usr/local/ace/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/...

    ACE技术内幕:深入解析ACE架构设计与实现原理.zip

    书中会详细分析ACE的线程同步机制,如互斥锁、条件变量、读写锁等,以及如何利用这些工具构建高效的并发程序。 此外,书中还包含大量代码案例,涵盖了从简单的服务器端应用到复杂的分布式系统设计。这些案例将帮助...

    ACE的中文文档(讲解ACE库)

    4. **并发与同步**:ACE的并发模型包括线程池、工作队列和门限调度器等,而同步机制则有互斥量、条件变量、信号量等,这些帮助开发者实现高效的并发控制。 5. **I/O复用**:ACE利用操作系统提供的select,poll,...

    ACE 5.5 参考手册

    2. **线程和并发**:ACE 提供了强大的线程管理工具,如线程池(ACE_Thread_Manager)、互斥锁(ACE_Mutex)和条件变量(ACE_Condition_Recursive_Mutex),允许开发者创建和管理并发执行的任务。 3. **I/O 复用**:...

    ACE学习资料合集

    3. ACE的并发和线程管理:线程池(ACE_Thread_Manager),线程同步(锁、条件变量、信号量等)。 4. ACE的时间管理和定时器:如ACE_Timer_Queue,用于实现定时事件的调度。 5. ACE的内存管理:包括动态内存分配器...

    ACE程序员指南

    1. **ACE的线程和进程管理**:包括线程池的使用、线程同步机制(如互斥锁、条件变量、读写锁)以及进程间通信(IPC)。 2. **ACE的网络编程接口**:如TCP和UDP套接字的使用,以及ACE_SOCK和ACE_Acceptor等类的详细...

    ACE开发实例

    `ACE_TSS`(Thread Specific Storage)类解决了多线程环境下的全局变量同步问题,为每个线程提供了一种私有化全局数据的机制,避免了同步冲突。 `ACE_Thread_Manager`类提供了多种方法以支持线程管理。例如,`...

    ACE6.2完整包

    `ACE_Synch`提供了多种同步原语,如互斥量、条件变量等。 2. **TAO (The Adaptive Communication Environment)**: TAO是基于CORBA(Common Object Request Broker Architecture)的实现,它扩展了ACE的功能,提供了...

    ACE-5.2.zip ACE5.2源码

    3. **并发与线程管理**:ACE提供了线程池、信号处理、同步原语(如互斥锁、信号量、条件变量)等机制,帮助开发者有效地管理和调度并发任务。 4. **分布式对象**:ACE支持CORBA(Common Object Request Broker ...

    ACE经典教程 经典

    ACE提供线程、信号量、互斥量、条件变量等多种同步机制,帮助开发者管理并发资源,避免竞争条件和死锁。此外,还有线程池和工作队列等高级并发模型。 5. ACE移植性和可扩展性: ACE的跨平台特性使得开发者可以在...

    ACE资料系列2 - 例子学习

    3. **线程与并发**:ACE提供了强大的线程管理功能,包括线程创建、同步、互斥、条件变量等。示例可能会展示如何使用ACE_Guard和ACE_Mutex来实现线程安全。 4. **I/O复用**:ACE_Win32_Acceptor和ACE_SOCK_Acceptor...

Global site tag (gtag.js) - Google Analytics