ACE多线程编程(一)
使用ACE进行多线程编程的内容相对较多,分多篇总结。
本文中主要介绍线程的创建、互斥体和线程间通信。
1、线程的创建使用ACE进行多线程编程比较简单,只需:
- 从ACE_Task_Base创建子类;重新实现svc()虚方法,这个函数是新线程的进入点。新线程从svc函数开始执行,函数返回,则新线程也结束;调用ACE_Task_Base::activate()方法启动新线程;调用ACE_Task_Base::wait()方法等待新线程结束。调用wait方法的父线程将阻塞,一直等待所有子线程结束。
注:如果父线程没有等待子线程,而是提前退出,则子线程也将被迫终止。
2、互斥体ACE提供了一系列的互斥体,互斥体提供了简单的acquire()和release()接口。在多线程的互斥保护中,我们可以使用ACE_Thread_Mutex互斥体。
举一个简单的例子,多个线程使用同一个socket发送数据,为了防止交叉写,我们需要使用互斥体,示例代码如下: