没有合适的资源?快使用搜索试试~ 我知道了~
嵌入式系统/ARM技术中的QNX环境下多线程编程
1星 11 下载量 55 浏览量
2020-12-10
06:10:42
上传
评论
收藏 113KB PDF 举报
温馨提示
试读
4页
作者Email: zoutom@163.com 摘要:介绍了QNX实时操作系统和多线程编程技术,包括线程间同步的方法、多线程程序的分析步骤、线程基本程序结构以及实用编译方法。 关键词:QNX;多线程;同步;程序结构 0引言: QNX是由加拿大QNX软件有限系统公司开发的一种多任务、分布式、可嵌入的实时操作系统。它有着轻巧的微内核,可以对进程进行全面的地址保护,可剪裁,模块化程度高,实时性强,安全可靠。符合POSIX标准的API使它成为一个开放式互联系统,便于与UNIX/LINUX系统的移植。QNX有着不同于UNIX或LINUX的模块化设计思想,并不是UNIX或LINU
资源详情
资源评论
资源推荐
嵌入式系统嵌入式系统/ARM技术中的技术中的QNX环境下多线程编程环境下多线程编程
作者Email: zoutom@163.com 摘要:介绍了QNX实时操作系统和多线程编程技术,包括线程间同步的方法、多线
程程序的分析步骤、线程基本程序结构以及实用编译方法。 关键词:QNX;多线程;同步;程序结构 0引言: QNX是
由加拿大QNX软件有限系统公司开发的一种多任务、分布式、可嵌入的实时操作系统。它有着轻巧的微内核,
可以对进程进行全面的地址保护,可剪裁,模块化程度高,实时性强,安全可靠。符合POSIX标准的API使它成
为一个开放式互联系统,便于与UNIX/LINUX系统的移植。QNX有着不同于UNIX或LINUX的模块化设计思想,
并不是UNIX或LINU
作者Email: zoutom@163.com
摘要摘要:介绍了QNX实时操作系统和多线程编程技术,包括线程间同步的方法、多线程程序的分析步骤、线程基本程序结构以及
实用编译方法。
关键词关键词:QNX;多线程;同步;程序结构
0引言:
QNX是由加拿大QNX软件有限系统公司开发的一种多任务、分布式、可嵌入的实时操作系统。它有着轻巧的微内核,可以对
进程进行全面的地址保护,可剪裁,模块化程度高,实时性强,安全可靠。符合POSIX标准的API使它成为一个开放式互联系
统,便于与UNIX/LINUX系统的移植。QNX有着不同于UNIX或LINUX的模块化设计思想,并不是UNIX或LINUX的一种演化,
而是完全不同的一种全新的实时操作系统。由于其独特的体系结构,QNX广泛应用于嵌入式系统、机器人工程、工业控制、
航空航天等各个领域。
在QNX中,线程是一个单一的控制执行流。从程序的最低层角度考虑,线程包括当前指令位置指针(也称为计数器或PC)、
栈顶指针(SP)和一些寄存器,而进程占据一定的内存空间,是一个或多个线程的集合。在同一进程中的线程共享许多资
源,在QNX系统中共享的资源有:内存中储存在栈区以外的变量——即非局部变量;信号处理器;信号忽略屏蔽字;通道
——建立于服务器端;连接——建立于客户端,而在不同进程中的线程除了CPU之外,几乎不共享任何资源。当然QNX提供
了shm_open()函数来使不同进程中的线程共享一段内存。
在早期的QNX版本如QNX4中,对于线程的支持是比较弱的,在当时的条件下,处理大型、复杂的并发多任务问题时,常常将
问题分解为多个进程以降低问题的复杂性。而且QNX提供了与UNIX类似的进程间通讯IPC手段如消息、代理、信号灯等,功
能也相对比较成熟、完善。1999年以后 QNX软件公司推出了QNX/Neutrino实时操作系统的Neutrino2.0、Neutrino6.0增加了
对于POSIX线程的支持,标准的API不但使它易于扩展,而且也使得编写多线程程序变得容易。由于线程具上下文较轻、切换
较快、在创建多个线程时系统的开销比较小、通讯手段灵活多样、共享资源丰富等优点,在处理大型并发多任务问题时多线程
有了明显的优势。QNX是抢先式多任务系统,这种系统决定了多个线程在访问共享资源时线程执行的次序变得不可预期,所以
线程间的同步就显得极为重要。QNX提供了多种同步机制以保证多线程程序的安全、可靠。
1 QNX多线程库函数简介多线程库函数简介
QNX与LINUX不同,没有单独的线程库,与线程有关的API是作为C语言库函数的一部分使用的,头文件是,同样方便地提供
线程的创建、终止和同步等功能。QNX不仅在C语言库函数中提供了符合POSIX1003.1c标准的与线程相关的API,而且还提
供了很多POSIX标准没有的扩展功能,使得多线程编程变得更加容易。
1.1线程的创建、取消和终止
1.11线程的创建
QNX通过pthread_create()函数创建线程,API定义如下:
int pthread_create( pthread t* thread, const pthread attr t* attr, void* (*start routine)(void* ), void* arg );
pthread_create()创建的线程执行start routine() 函数,thread返回创建的线程描述符,而attr是创建线程时设置的线程属
性,arg可以作为任意类型的参数传给start routine()函数。QNX对创建线程前需要设置的线程属性进行了扩展,增加了POSIX
标准无法设置的属性如:可以禁止一个线程的取消(终止操作);可以设置一个线程的取消类型;可以指定当一个线程接到信
号时,它如何操作。
1.12 线程的取消
QNX通过调用int pthread_cancel(pthread_t thread)函数取消由thread指定的线程,如果成功则返回0,否则为非0,成功并不
意味着thread会终止,要视取消的状态和类型而定。QNX提供了设定取消状态和类型的API pthread_setcancelstate()和
pthread_setcanceltype(),取消的状态有两种:PTHREAD_CANCEL_ENABLE表示将线程设为取消状
态,PTHREAD_CANCEL_DISABLE表示忽略取消状态;取消的类型也有两种:
THREAD_CANCEL_DEFFERED表示执行到取消点取消,PTHREAD_CANCEL_ASYCHRONOUS表示立即取消。
1.13 线程的终止
QNX中终止一个线程需要调用pthread exit(),其API定义:
void pthread exit( void* value ptr );
weixin_38741966
- 粉丝: 2
- 资源: 916
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1