资源描述:
《qnx环境下多线程的编程》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、QNX环境下多线程的编程.freel_open()函数来使不同进程中的线程共享一段内存。在早期的qnx版本如qnx4中,对于线程的支持是比较弱的,在当时的条件下,处理大型、复杂的并发多任务问题时,常常将问题分解为多个进程以降低问题的复杂性。而且qnx提供了与unix类似的进程间通讯ipc手段如消息、代理、信号灯等,功能也相对比较成熟、完善。1999年以后qnx软件公司推出了qnx/neutrino实时操作系统的neutrino2.0、neutrino6.0增加了对于posix线程的支持,标准的api不但使它易于扩展,而且也使得编写多线程程序变得容易。由于线程具上下文较轻、切换较快、
2、在创建多个线程时系统的开销比较小、通讯手段灵活多样、共享资源丰富等优点,在处理大型并发多任务问题时多线程有了明显的优势。qnx是抢先式多任务系统,这种系统决定了多个线程在访问共享资源时线程执行的次序变得不可预期,所以线程间的同步就显得极为重要。qnx提供了多种同步机制以保证多线程程序的安全、可靠。1qnx多线程库函数简介qnx与linux不同,没有单独的线程库,与线程有关的api是作为c语言库函数的一部分使用的,头文件是,同样方便地提供线程的创建、终止和同步等功能。qnx不仅在c语言库函数中提供了符合posix1003.1c标准的与线程相关的api,而且还提供了很多posix标准没
3、有的扩展功能,使得多线程编程变得更加容易。1.1线程的创建、取消和终止1.11线程的创建qnx通过pthread_create()函数创建线程,api定义如下:intpthread_create(pthreadt*thread,constpthreadattrt*attr,void*(*startroutine)(void*),void*arg);pthread_create()创建的线程执行startroutine()函数,thread返回创建的线程描述符,而attr是创建线程时设置的线程属性,arg可以作为任意类型的参数传给startroutine()函数。qnx对创建线程前需
4、要设置的线程属性进行了扩展,增加了posix标准无法设置的属性如:可以禁止一个线程的取消(终止操作);可以设置一个线程的取消类型;可以指定当一个线程接到信号时,它如何操作。1.12线程的取消qnx通过调用intpthread_cancel(pthread_tthread)函数取消由thread指定的线程,如果成功则返回0,否则为非0,成功并不意味着thread会终止,要视取消的状态和类型而定。qnx提供了设定取消状态和类型的apipthread_setcancelstate()和pthread_setcanceltype(),取消的状态有两种:pthread_cancel_enab
5、le表示将线程设为取消状态,pthread_cancel_disable表示忽略取消状态;取消的类型也有两种:thread_cancel_deffered表示执行到取消点取消,pthread_cancel_asychronous表示立即取消。1.13线程的终止qnx中终止一个线程需要调用pthreadexit(),其api定义:voidpthreadexit(void*valueptr);当一个线程在执行了startroutine()函数后返回时,系统自动隐式调用pthreadexit()使其退出,startroutine()的返回值,作为线程的退出状态。在一个线程中也可以显式调用
6、pthreadexit()退出,对于单线程进程而言,调用pthreadexit()与调用exit(0)是等效的。1.2线程的常用控制函数pthread_self()api:pthread_tpthread_self(void);说明:返回线程描述符,pthread_create()返回值相同。pthread_equal()api:intpthread_equal(pthread_tt1,pthread_tt2);说明:t1,t2为线程描述符,可调用pthread_self()和pthread_create()得到。此函数功能为比较两个线程的描述符,不管线程描述符是否合法。如果返回值
7、为非零说明两个线程是同一线程,为零说明两个线程不是同一线程。pthread_join()api:intpthread_join(pthread_tthread,void**value_ptr);说明:thread为等待终止的目标线程,value_ptr为一指针,当值不为null时指向一个内存空间,这个空间用来存放目标线程传给pthread_exit()的数据。调用pthread_join()的线程将被挂起,直到目标线程终止。一个线程仅允许唯一的线程使用pthread_