2022年ACE基本的多线程编程[ .pdf
《2022年ACE基本的多线程编程[ .pdf》由会员分享,可在线阅读,更多相关《2022年ACE基本的多线程编程[ .pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ACE基本的多线程编程( Basic Multithreaded Programming)从 ACE_Task_Base 或 ACE_Task 派生你的线程对象,重载 virtual int svc (void);虚函数,那就是线程的入口函数。#include #include class HA_CommandHandler : public ACE_Task_Base public: virtual int svc(void) ACE_DEBUG(LM_DEBUG, ACE_TEXT(%t) Handler Thread runningn); ACE_OS:sleep(4); return
2、0; ; int ACE_TMAIN(int, ACE_TCHAR *) ACE_DEBUG(LM_DEBUG, ACE_TEXT(%t) Main Thread runningn); HA_CommandHandler handler; int result = handler.activate(); ACE_ASSERT(result = 0); handler.wait(); return 0; 在激活线程 (activate()方法)之后,主线程会调用处理器对象上的wait() 方法,等待其线程完成,然后在继续执行,并退出main() 函数。使用线程互斥体 ACE_Thread_Mut
3、ex 如果成功获得互斥体,进行获取的线程(acquire())继续向前执行;否则它就会阻塞,直到该互斥体的持有者释放它(release())为止。#include #include #include #include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - class HA_Device_Repository public: HA_Device_Repository() void update_device(int de
4、vice_id) /使用守卫 /ACE_GUARD(ACE_Thread_Mutex, mon, mutex_); ACE_Guard guard(this-mutex_); /mutex_.acquire(); ACE_DEBUG(LM_DEBUG, ACE_TEXT(%t) Updating device %dn), device_id); ACE_OS:sleep(1); /mutex_.release(); private: ACE_Thread_Mutex mutex_; ; class HA_CommandHandler : public ACE_Task_Base public:
5、 enum NUM_USES = 10; HA_CommandHandler(HA_Device_Repository& rep) : rep_(rep) virtual int svc(void) ACE_DEBUG(LM_DEBUG, ACE_TEXT(%t) Handler Thread runningn); for (int i=0; i rep_.update_device(i); return 0; private: HA_Device_Repository& rep_; ; int ACE_TMAIN(int, ACE_TCHAR *) 名师资料总结 - - -精品资料欢迎下载
6、- - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - HA_Device_Repository rep; HA_CommandHandler handler1(rep); HA_CommandHandler handler2(rep); handler1.activate(); handler2.activate(); handler1.wait(); handler2.wait(); return 0; 使用守卫( Using Guards )当然你在上面的代码中你已经看到
7、了我已经使用了守卫(Guards)。在许多的情况下, 异常情况会在本可以完好运行的代码中造成死锁(忽略了某个异常路经、忘记释放互斥体)。守卫(Guards)基于一种常见的 C+ 惯用手法:把构造器和析构器用于资源的获取和释放。在栈上使用守卫( Guards),你就总能保证锁的释放,不管你的代码所走的是什么样的非正常路径。ACE Guard Classes Guard Description ACE_Guard Uses the acquire() and release() methods of lock class T during guard creation and destructio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年ACE基本的多线程编程 2022 ACE 基本 多线程 编程
限制150内