ACE
self-motivation
专注LINUX系统与性能分析优化
展开
-
ACE:ACE_SOCK_STREAM应用实例
ACE_SOCK_Acceptor用于被动连接的建立,基于BSD accept()和listen()调用,接受客户端连接请求后,将可靠的数据流传递给ACE_SOCK_STREAM类的一个对象,便可调用流的recv(),send()方法在流上接收或发送数据。另外,ACE_INET_Addr封装了传统的地址结构体。#include #include #include "ac原创 2012-02-12 21:00:29 · 7325 阅读 · 0 评论 -
ACE:条件类属(Condition)
考虑场景:设想线程需要在全局消息队列里插入消息,首先它要判断是否还有空闲,如果没有,要继续等待直到其他线程释放了该空间。使用条件变量要注意以下步骤1.获取全局资源(消息队列)锁。2.检查条件(消息队列有空闲吗?)3.如果没有wait().(注:条件变量的wait()会释放1中的锁,以使其他线程能获取全局资源。一旦收到signal()信号,会继续获得锁,并检查条件2。)4.如原创 2012-02-16 23:19:14 · 1911 阅读 · 0 评论 -
ACE:守卫类属
ACE_Guard是一种模版,它通过所需的锁机制来定制类型。工作原理是:构造函数里获取锁,析构函数里释放锁。所以下面的代码会看到,一旦某个线程获得了锁,那么这个线程会执行完毕,其他线程才能再获得锁。#include #include #include "ace/Token.h"#include "ace/Synch.h"#include "ace/Threa原创 2012-02-14 23:20:18 · 997 阅读 · 0 评论 -
ACE:使用令牌作为递归互斥锁
令牌的特性:它可以被最初获得它的线程进行多次的重新获取,而且确保所有试图获得它的线程严格按照先进先出的顺序排序。运行下面程序,观察不同线程请求令牌与获得令牌的顺序。#include #include #include "ace/Token.h"#include "ace/Thread.h"#include "ace/Log_Msg.h"struc原创 2012-02-14 22:34:14 · 1228 阅读 · 0 评论 -
ACE:将锁与适配器用于动态绑定
如果想动态改变代码所使用的锁类型,ACE的ACE_Lock和ACE_Lock_Adapter,可以用于运行时替换。下面的例子根据程序的输入选择使用递归互斥体或者非递归互斥体。但是使用动态绑定的缺点是每次调用都需要负担额外的经由虚函数表的间接层次。#include #include #include "ace/Lock_Adapter_T.h"#include "原创 2012-02-14 22:05:12 · 1152 阅读 · 0 评论 -
ACE利用ACE_Thread_Mutex实现线程间互斥访问临界区
#include "ace/Thread.h"#include "ace/Synch.h"#include "ace/Log_Msg.h"struct Args{public:Args(int iterations):_mutex(),iterations(iterations){}ACE_Thread_Mutex _mutex;int iterations;原创 2012-02-13 22:57:56 · 4029 阅读 · 0 评论 -
ACE:任务间通信
上一次提到了ACE中的主动对象,其实每一个任务都有一个消息队列,这个消息队列可用作任务间通信的一种方式。当一个任务想要与另一个任务通信时,他创建一个消息,并将消息放入它想通信的任务的消息队列中。另一个任务用getq()方法来获得这个消息。如果队列中没有消息,任务就进入休眠状态。下面的例子演示如何进行任务间通信,生产者产生数据并放到消费者的消息队列中,消费者从队列中取出数据,并进行处原创 2012-02-22 22:38:09 · 1141 阅读 · 0 评论 -
ACE在WINDOWS下配置
ACE配置及问题总结 ACEACE自适配通信环境 (Adaptive Communication Environment)是面向对象的框架和工具包,它为通信软件实现了核心的并发和分布式模式。ACE包含的多种组件可以帮助通信软件的开发获得更好的灵活性、效率、可靠性和可移植性。 早就在网上看到很多有关ACE有关的介绍,所以准备在接下来的时间里学习一下,主要想在c++通信软件设计方转载 2012-02-13 01:33:16 · 965 阅读 · 0 评论 -
ACE内存托管之ACE_Cached_Allocator使用
ACE_Cached_Allocator预先分配内存,然后使用它自己的内部机制来管理内存。这样的分配发生在类的构造器中。所以使用它,仅在开始时使用OS内存分配接口来完成分配。在那以后,它将照管所有内存分配和释放。这样做的好处是性能和可预测性。设想一个必须高度可预测的实时系统,通过OS来分配内存将涉及昂贵和不可预测的OS内核调用。而ACE_Cached_Allocator不会涉及这种原创 2012-02-12 23:17:58 · 2883 阅读 · 1 评论 -
ACE:Active Object主动对象
1.什么是主动对象? 传统上,所有的对象都是被动的代码段。对象中的代码在对它发出调用的线程中执行。也就是说,调用线程被“借出”,用于执行被动对象的代码。而 主动对象则不同,他们持有自己的线程,并将这线程用于执行自己的方法。可以想象成传统的对象里封装了多个线程,就得到了一个主动对象。2.ACE_Task是ACE中任务或主动对象的基类,所有希望成为主动对象的类从此类派生。原创 2012-02-22 00:06:52 · 1681 阅读 · 0 评论 -
ACE:TSS线程私有存储
使用线程私有存储,如果可以将全局或静态变量放入其中,可以降低线程同步间的开销。传统上,线程专有存储通过令人迷惑的系统API来实现。在ACE中,TSS通过使用ACE_TSS模版类来实现。需要成为线程私有存储的类放入模版中,然后可以使用C++的->操作符来调用该类的全部公有方法。#include "ace/Synch.h"#include "ace/Thread_Man原创 2012-02-21 23:44:40 · 2544 阅读 · 0 评论 -
ACE中的栅栏(Barrier)
一组线程可以使用栅栏来进行共同的相互同步。组中的线程各自执行,直到到达栅栏,就阻塞在那里。在所有相关线程到达栅栏后,它们就全部继续执行。栅栏在ACE_Barrier类中实现,在实例化时,将要等待的线程数目作为参数传入,一旦到达栅栏点,线程调用wait方法阻塞,当其他线程也到达栅栏点时,再一起继续执行。#include "ace/Thread.h"#include "ace/Sy原创 2012-02-18 20:52:14 · 3175 阅读 · 1 评论