- 浏览: 2028314 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
ACE Lock类属
锁类属包含的类包装简单的锁定机制,比如互斥体、信号量、读/写互斥体和令牌等。这里我就以互斥体为例简单的介绍一下其使用方法,对其它的锁类进行一些简单的说明。
1.互斥体的使用。
互斥体用于保护共享的易变代码,也就是全局或静态数据。这样的数据必须通过互斥体进行保护,以防止它们在多个线程同时访问时损坏。
在ACE中可以通过ACE_Thread_Mutex实现线程的访问互斥,下面的例子演示ACE_Thread_Mutex类的使用。
#include "ace/Thread.h" #include "ace/Synch.h" #include <iostream> using namespace std; ACE_Thread_Mutex mutex; void* Thread1(void *arg) { mutex.acquire(); ACE_OS::sleep(3); cout<<endl<<"hello thread1"<<endl; mutex.release(); return NULL; } void* Thread2(void *arg) { mutex.acquire(); cout<<endl<<"hello thread2"<<endl; mutex.release(); return NULL; } int main(int argc, char *argv[]) { ACE_Thread::spawn((ACE_THR_FUNC)Thread1); //Thread2 比Thread1晚创建1秒钟,故后尝试获取互斥体 ACE_OS::sleep(1); ACE_Thread::spawn((ACE_THR_FUNC)Thread2); while(true) ACE_OS::sleep(10); return 0; }
ACE_Thread_Mutex主要有两个方法:
- acquire():用来获取互斥体,如果无法获取,将阻塞至获取到为止。
- release():用来释放互斥体,从而使自己或者其它线程能够获取互斥体。
当线程要访问共享资源时,首先调用acquire()方法获取互斥体,从而获取对改互斥体所保护的共享资源的唯一访问权限,访问结束时调用释放互斥体,使得其它线程能获取共享资源的访问权限。
在此例中,本来Thread2的打印消息在Thread1之前,但由于Thread1先获得互斥体,故Thread2只有待Thread1结束后才能进入临界区。读者朋友们可以通过将ACE_Thread_Mutex替换为ACE_NULL_Mutex看一下不加锁的执行结果。
2.ACE Lock类属简介。
ACE Lock类属列表如下:
名字 |
描述 |
ACE_Mutex |
封装互斥机制(根据平台,可以是mutex_t、pthread_mutex_t等等)的包装类,用于提供简单而有效的机制来使对共享资源的访问序列化。它与二元信号量(binary semaphore)的功能相类似。可被用于线程和进程间的互斥。 |
ACE_Thread_Mutex |
可用于替换ACE_Mutex,专用于线程同步。 |
ACE_Process_Mutex |
可用于替换ACE_Mutex,专用于进程同步。 |
ACE_NULL_Mutex |
提供了ACE_Mutex接口的"无为"(do-nothing)实现,可在不需要同步时用作替换。 |
ACE_RW_Mutex |
封装读者/作者锁的包装类。它们是分别为读和写进行获取的锁,在没有作者在写的时候,多个读者可以同时进行读取。 |
ACE_RW_Thread_Mutex |
可用于替换ACE_RW_Mutex,专用于线程同步。 |
ACE_RW_Process_Mutex |
可用于替换ACE_RW_Mutex,专用于进程同步。 |
ACE_Semaphore |
这些类实现计数信号量,在有固定数量的线程可以同时访问一个资源时很有用。在OS不提供这种同步机制的情况下,可通过互斥体来进行模拟。 |
ACE_Thread_Semaphore |
应被用于替换ACE_Semaphore,专用于线程同步。 |
ACE_Process_Semaphore |
应被用于替换ACE_Semaphore,专用于进程同步。 |
ACE_Token |
提供"递归互斥体"(recursive mutex),也就是,当前持有某令牌的线程可以多次重新获取它,而不会阻塞。而且,当令牌被释放时,它确保下一个正阻塞并等待此令牌的线程就是下一个被放行的线程。 |
ACE_Null_Token |
令牌接口的"无为"(do-nothing)实现,在你知道不会出现多个线程时使用。 |
ACE_Lock |
定义锁定接口的接口类。一个纯虚类,如果使用的话,必须承受虚函数调用开销。 |
ACE_Lock_Adapter |
基于模板的适配器,允许将前面提到的任意一种锁定机制适配到ACE_Lock接口。 |
可以简单的分为以下几类:
-
互斥锁
互斥锁(通常称为"互斥体"或"二元信号量")用于保护多线程控制并发访问的共享资源的完整性。互斥体通过定义临界区来序列化多线程控制的执行,在临界区中每一时刻只有一个线程在执行它的代码。互斥体简单而高效(时间和空间)。
ACE线程库提供了Mutex式的类(是一组互斥体对象,拥有类似的接口),他是一种简单而高效的类型是"非递归"互斥体。非递归互斥体不允许当前拥有互斥体的线程在释放它之前重新获取它。否则,将会立即发生死锁。递归互斥体在ACE Recursive_Thread_Mutex类中可移植地实现。 -
读者/作者锁
读者/作者锁与互斥体相类似。例如,获取读者/作者锁的线程也必须释放它。多个线程可同时获取一个读者/作者锁用于读,但只有一个线程可以获取该锁用于写。当互斥体保护的资源用于读远比用于写要频繁时,读者/作者互斥体有助于改善并发的执行。
ACE线程库提供了一个叫作RW_Mutex的类,在C++封装类中可移植地实现了读者/作者锁的语义。读者/作者锁将优先选择权给作者。因而,如果有多个读者和一个作者在锁上等待,作者将会首先获取它。
计数信号量
在概念上,计数信号量是可以原子地增减的整数。如果线程试图减少一个值为零的信号量的值,它就会阻塞,直到另一个线程增加该信号量的值。
计数信号量用于追踪共享程序状态的变化。它们记录某种特定事件的发生。因为信号量维护状态,它们允许线程根据该状态来作决定,即使事件是发生在过去。
信号量比互斥体效率要低,但是,它们要更为通用,因为它们无需被最初获取它们的同一线程获取和释放。这使得它们能够用于异步的执行上下文中(比如信号处理器)。ACE线程库提供一个叫作Semaphore的类来可移植地在C++包装类中实现信号量语义。
发表评论
-
u盘乱码恢复方法
2015-05-20 15:29 1744u盘乱码恢复方法,在使用u盘、SD卡、tf卡等移动储 ... -
使用 ACE 库框架在 UNIX 中开发高性能并发应用
2009-11-19 14:36 3152使用 ACE 库框架在 UNIX ... -
ACE中TCP通信
2009-09-17 11:10 2252概述: 传输控制协议TCP(Transmission C ... -
ACE的TSS bug
2009-08-26 13:55 1596ACE的TSS bug Bugzilla Bug ... -
ACE读取ini格式的配置文档
2009-08-12 15:16 2128ACE读取ini格式的配置文档 不多说了,功能很清 ... -
reactor_logging_server会出现运行 error LNK2019
2009-08-06 17:06 2566reactor_logging_server会出 ... -
ACE前摄器Proactor模式
2009-08-05 11:36 4487ACE前摄器Proactor模式 ... -
ACE_Message_Block功能简介
2009-08-05 11:35 3057ACE_Message_Block功能简介 ACE_Me ... -
ACE接受器-连接器模式
2009-08-05 11:34 4025ACE接受器-连接器模 ... -
ACE反应器(Reactor)模式(4)
2009-08-05 11:31 5212ACE反应器(Reactor)模式(4) 定时器的实现 ... -
ACE反应器(Reactor)模式(3)
2009-08-05 11:31 3906ACE反应器(Reactor)模式(3 ... -
ACE反应器(Reactor)模式(2)
2009-08-05 11:30 3497ACE反应器(Reactor)模式(2) 在Socket ... -
ACE反应器(Reactor)模式(1)
2009-08-05 11:29 3355ACE反应器(Reactor)模式(1 ... -
ACE主动对象模式(2)
2009-08-05 11:28 2144ACE主动对象模式(2) 在上篇文章里,我们简单的介绍了 ... -
ACE主动对象模式(1)
2009-08-05 11:27 2232ACE主动对象模式(1) 主动对象模式用于降低方法执行和 ... -
ACE中UDP通信
2009-08-05 11:26 2932ACE中UDP通信 udp是一种无连接的协议,提供无连接 ... -
ACE中TCP通信
2009-08-05 11:25 3194ACE中TCP通信 概述: 传输控制协议TCP(Tra ... -
ACE线程管理机制-面向对象的线程类ACE_Task
2009-08-05 11:24 2725ACE线程管理机制-面向 ... -
ACE线程管理机制-线程的创建与管理
2009-08-05 11:23 2475ACE线程管理机制-线程的创建与管理 有过在不同的操作系 ... -
ACE自适配通信环境简介
2009-08-05 11:21 1911ACE自适配通信环境简 ...
相关推荐
ACE线程是ACE库中的核心功能之一,它提供了C++封装的线程管理接口。通过ACE_Thread类,开发者可以方便地创建、管理和同步线程。ACE线程支持线程局部存储(TLS),用于在线程间保持独立的数据,以及线程池管理,允许...
2. ACE_Thread_Manager:提供了一个线程管理机制,实现了对线程的创建、管理和同步。 3. ACE_Synch:提供了一个同步机制,实现了对线程之间的同步和互斥。 ACE线程封装库的应用场景包括: 1. 客户/服务器应用:ACE...
总的来说,ACE框架提供了丰富的网络编程、并发控制、线程管理、I/O复用等工具,对于开发者来说,它降低了开发复杂网络应用的难度,提高了代码的可移植性和可维护性。通过理解和掌握ACE框架,开发者可以更高效地构建...
ACE是一个开源库,提供了许多网络编程中常见的服务,如线程管理、同步机制、I/O复用、时间管理和事件处理等。它通过提供可移植的接口,简化了在不同操作系统上的开发工作。 2. **ACE架构**:ACE的核心设计理念是...
ACE的设计基于模块化,使得开发者可以按需选择和使用其提供的组件,例如TCP/IP套接字抽象、线程管理、定时器队列等。此外,ACE还支持许多高级通信模式,如反应器模式、服务容器和工作调度器,这些都有助于简化复杂...
4. **并发与线程管理**:ACE提供了高级的线程管理工具,如Thread Manager和Thread Pool,用于高效地调度和管理并发任务。这部分内容将解释如何使用这些工具来优化多线程程序的性能。 5. **时间管理和同步**:ACE...
ACE线程管理包括线程创建、同步、线程池等。 - 使用`ACE_Thread_Manager`来管理线程生命周期。 - `ACE_Thread::spawn()`函数用于创建新线程。 - `ACE_Thread_Mutex`和`ACE_Semaphore`等类用于实现线程同步和互斥。 ...
ACE是一个强大的、开源的、跨平台的C++框架,它提供了一整套网络编程的抽象和实用工具,包括并发处理、线程管理、I/O复用、对象间通信以及时间管理和事件调度等。利用ACE,开发者可以轻松地构建分布式、高可用性和高...
这个压缩包包含的文件主要是ACE服务器的源码及相关组件,可以帮助我们深入理解ACE的工作机制以及如何构建高性能的并发服务器。 1. **ACE 框架** ACE 是一个C++库,它提供了许多高级网络通信机制,如事件处理、异步...
- ACE-radius将Radius协议的逻辑封装在ACE库中,利用ACE的异步I/O和多线程能力,可以高效地处理并发认证请求。 - ACE的跨平台特性意味着ACE-radius可以在多种操作系统上运行,如Windows、Linux、Unix等。 5. **...
- 主函数:初始化服务器,设置监听端口,创建线程管理器。 - `ACE_SOCK_Acceptor`的实例化:用于接收客户端连接。 - 自定义的服务处理类:继承自`ACE_Service_Object`,实现业务逻辑。 - 线程创建:当有新的客户端...
5. **对象激活和生命周期管理**:ACE提供了对对象创建、激活、暂停、恢复和终止的控制,有助于实现复杂系统的生命周期管理。 **PPT资料的价值** 与《C++网络编程 卷2》配套的PPT资料,通常会包含深入的示例、图形...
5. **并发与线程**:ACE 提供了线程管理和同步原语,帮助开发者在多线程环境中编写高效、安全的代码。 6. **性能优化**:针对实时系统,ACE 内置了各种性能优化策略,如缓冲池、预读取、延迟写等,提高系统的响应...
2. **并发与线程管理**:ACE提供了线程池、守护线程、线程同步和互斥锁等机制,简化了多线程编程。 3. **事件驱动模型**:ACE的Reactor模式实现了事件驱动编程,允许应用程序处理多个并发事件,提高了系统响应速度。...
ACE5.4是该框架的一个版本,提供了丰富的网络编程接口和工具,支持多种协议,包括TCP/IP、UDP、Sockets等,并且具有线程管理和并发控制等功能。 ACE框架的核心特点包括: 1. **跨平台兼容性**:ACE可以在多个操作...
在《ACE并发编程.docx》文档中,你可以找到关于如何创建和使用ACE_Task的详细步骤,包括初始化、消息处理、线程管理和销毁等过程。《ACE_Task类讲解.docx》则可能进一步深入到类的成员函数、接口以及实际应用示例,...
1. **并发与线程管理**:ACE提供了一套全面的线程管理API,包括线程创建、同步、互斥锁、条件变量等功能,使得开发者能轻松处理多线程编程中的复杂问题。 2. **异步事件处理**:ACE的Reactor模式是处理异步事件的...
总结来说,`ACE_Message_Block`是ACE库中处理数据传输和并发通信的核心组件,它的设计和实现充分考虑了性能和内存管理,为开发高效、可靠的网络应用提供了强大支持。通过学习和熟练掌握`ACE_Message_Block`,开发者...