`

ACE线程管理机制-线程的创建与管理

    博客分类:
  • ACE
阅读更多

有过在不同的操作系统下用c++进行过多线程编程的朋友对那些线程处理的API可能深有体会,这些API提供了相同或是相似的功能,但是它们的API的差别却极为悬殊,十分令人头痛。

ACE_Thread提供了对不同OS的线程调用的简单包装,通过一个通用的接口进行处理线程创建、挂起、取消和删除等问题。

一. 线程入口函数

所有线程必须从一个指定的函数开始执行,该函数称为线程函数,它必须具有下列原型:
void* worker(void *arg) {}
该函数输入一个void *型的参数,可以在创建线程时传入。
注意:所有的线程启动函数(方法)必须是静态的或全局的(就如同直接使用OS线程API时所要求的一样)。

二.线程基本操作

1.创建一个线程

一个进程的主线程是由操作系统自动生成,如果你要让一个主线程创建额外的线程,可以通过ACE_Thread::spawn()实现,该函数一般的使用方式如下:

    ACE_thread_t threadId;
    ACE_hthread_t threadHandle;

    ACE_Thread::spawn(
        (ACE_THR_FUNC)worker,        //线程执行函数
        NULL,                        //执行函数参数
        THR_JOINABLE | THR_NEW_LWP,
        &threadId,
        &threadHandle
        );

为了简化,也可以使用其默认参数,直接使用ACE_Thread::spawn((ACE_THR_FUNC)worker) 来创建一个worker的线程。

另外,ACE还提供了ACE_Thread::spawn_n函数来创建多个线程。

2.终止线程

在线程函数体中ACE_Thread::exit()调用即可终止线程执行。

3.设定线程的相对优先级

当一个线程被首次创建时,它的优先级等同于它所属进程的优先级。一个线程的优先级是相对于其所属的进程的优先级而言的。可以通过调用ACE_Thread::setprio函数改变线程的相对优先级,该函数的调用方式如下:
ACE_Thread::setprio(threadHandle,ACE_DEFAULT_THREAD_PRIORITY)

4.挂起及恢复线程

挂起线程可以通过来实现,它能暂停一个线程的执行,其调用方式如下ACE_Thread::suspend(threadHandle) 。
相应的,可以通过ACE_Thread::resume(threadHandle) 恢复被挂起的线程的执行。

5.等待线程结束

在主函数中调用ACE_Thread::join(threadHandle)可阻塞主函数,直道线程结束才能继续执行。

6.停止线程

在主函数中调用ACE_Thread::cancel (threadHandle)可停止线程的执行(在Unix底下可以,而在windows下好像不起作用,有待检验)。

三.程序示例

下面例子演示了如何用ace创建一个线程。

#include "ace/Thread.h" 
#include "ace/Synch.h" 

#include <iostream>
using namespace std;

void* worker(void *arg) 
{
    for(int i=0;i<10;i++)
    {
        ACE_OS::sleep(1);
        cout<<endl<<"hello world"<<endl;
    }
    return NULL; 
} 

int main(int argc, char *argv[]) 
{ 
    ACE_thread_t threadId;
    ACE_hthread_t threadHandle;

    ACE_Thread::spawn(
        (ACE_THR_FUNC)worker,        //线程执行函数
        NULL,                        //执行函数参数
        THR_JOINABLE | THR_NEW_LWP,
        &threadId,
        &threadHandle
        );
    
    ACE_Thread::join(threadHandle);

    return 0; 
}
 

在这个简单的例子中,创建了1个工作者线程,执行程序中定义的worker()函数。然后阻塞主函数,待线程结束后退出程序。

分享到:
评论

相关推荐

    ACE学习应用实例-ACE线程

    ACE线程是ACE库中的核心功能之一,它提供了C++封装的线程管理接口。通过ACE_Thread类,开发者可以方便地创建、管理和同步线程。ACE线程支持线程局部存储(TLS),用于在线程间保持独立的数据,以及线程池管理,允许...

    ACE线程、锁、同步机制

    2. ACE_Thread_Manager:提供了一个线程管理机制,实现了对线程的创建、管理和同步。 3. ACE_Synch:提供了一个同步机制,实现了对线程之间的同步和互斥。 ACE线程封装库的应用场景包括: 1. 客户/服务器应用:ACE...

    ACE多级线程实例

    通过本文档的学习,我们可以了解到ACE框架下多线程编程的基本概念和技术细节,包括线程的创建与管理、线程锁的使用以及如何利用`ACE_Guard`来简化线程锁管理。这些技术对于构建高性能的分布式系统至关重要。希望本文...

    ACE资料系列2 - 例子学习

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

    ace 基础及其框架--个人整理版

    2. **互斥管理**:ACE的互斥管理机制主要通过ACE_Lock接口实现,包括ACE_Thread_Mutex、ACE_Synch_Traits等类,用于保证多线程环境下共享资源的安全访问。例如,ACE_Thread_Mutex可以用于保护全局或静态数据,防止...

    ACE学习合集--终极版

    "ACE教程.pdf"是一本完整的教程,可能会涵盖从基础到高级的各个方面,包括ACE的安装、配置、网络编程模型、线程管理、事件处理、对象间通信等主题。这份教程可能是按照学习路径编排的,适合逐步学习和实践。 "ACE的...

    MFCACE多线程demo

    ACE线程管理包括线程创建、同步、线程池等。 - 使用`ACE_Thread_Manager`来管理线程生命周期。 - `ACE_Thread::spawn()`函数用于创建新线程。 - `ACE_Thread_Mutex`和`ACE_Semaphore`等类用于实现线程同步和互斥。 ...

    ACE资料系列5 - ACE程序员指南 ACE程序员指南:网络与系统编程的实用设计模式

    4. **并发与线程管理**:ACE提供了高级的线程管理工具,如Thread Manager和Thread Pool,用于高效地调度和管理并发任务。这部分内容将解释如何使用这些工具来优化多线程程序的性能。 5. **时间管理和同步**:ACE...

    ACE资料系列1 - 配置和入门

    ACE的设计基于模块化,使得开发者可以按需选择和使用其提供的组件,例如TCP/IP套接字抽象、线程管理、定时器队列等。此外,ACE还支持许多高级通信模式,如反应器模式、服务容器和工作调度器,这些都有助于简化复杂...

    ACE多线程服务器C++实现

    - 主函数:初始化服务器,设置监听端口,创建线程管理器。 - `ACE_SOCK_Acceptor`的实例化:用于接收客户端连接。 - 自定义的服务处理类:继承自`ACE_Service_Object`,实现业务逻辑。 - 线程创建:当有新的客户端...

    ace-radius-0.9.2

    ACE是一个强大的、开源的、跨平台的C++框架,它提供了一整套网络编程的抽象和实用工具,包括并发处理、线程管理、I/O复用、对象间通信以及时间管理和事件调度等。利用ACE,开发者可以轻松地构建分布式、高可用性和高...

    ACE-radius

    - ACE-radius将Radius协议的逻辑封装在ACE库中,利用ACE的异步I/O和多线程能力,可以高效地处理并发认证请求。 - ACE的跨平台特性意味着ACE-radius可以在多种操作系统上运行,如Windows、Linux、Unix等。 5. **...

    ACE 框架模版

    5. **并发与线程**:ACE 提供了线程管理和同步原语,帮助开发者在多线程环境中编写高效、安全的代码。 6. **性能优化**:针对实时系统,ACE 内置了各种性能优化策略,如缓冲池、预读取、延迟写等,提高系统的响应...

    ACE资料系列4 - C++网络编程 卷2 基于ACE和框架的系统化复用 +PPT

    5. **对象激活和生命周期管理**:ACE提供了对对象创建、激活、暂停、恢复和终止的控制,有助于实现复杂系统的生命周期管理。 **PPT资料的价值** 与《C++网络编程 卷2》配套的PPT资料,通常会包含深入的示例、图形...

    ACE-5.4.10源码

    1. **并发与线程管理**:ACE提供了一套全面的线程管理API,包括线程创建、同步、互斥锁、条件变量等功能,使得开发者能轻松处理多线程编程中的复杂问题。 2. **异步事件处理**:ACE的Reactor模式是处理异步事件的...

    ACE程序员指南-网络与系统编程的实用设计模式

    ACE提供了一套完整的线程池和工作队列机制,帮助开发者管理线程资源,避免线程创建和销毁的开销,同时实现任务的并行执行。 网络编程是本书的重点之一。ACE支持多种网络协议,如TCP/IP、UDP、Multicast等,并提供了...

    sockets白皮书 --ace的入门经验--避免10个网络编程出错的经验

    ### Sockets白皮书——ACE的入门经验——避免10个网络编程出错的经验 #### 知识点一:Sockets编程的重要性与挑战 - **背景介绍**:本文档介绍了在当今软件开发领域中,虽然SOA、Web服务、AJAX等技术受到广泛关注,...

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

    ACE提供了一套线程管理工具,包括线程创建、同步、调度和销毁等,这些工具简化了在多线程环境中编写和维护代码的难度。线程同步机制,如互斥锁、条件变量和信号量,是防止数据竞争和死锁的重要手段,ACE对这些原语...

    ACE+TAO-6.0.0官网源码

    5. **线程和进程管理**:ACE支持线程和进程的创建、同步、通信等功能,方便开发者构建多线程或多进程应用。 **TAO ORB详解** 1. **CORBA标准实现**:TAO是完全遵循OMG的CORBA规范的ORB(Object Request Broker),...

Global site tag (gtag.js) - Google Analytics