- 相關(guān)推薦
QNX環(huán)境下多線程編程
作者Email: zoutom@163.com
摘要:介紹了QNX實時操作系統(tǒng)和多線程編程技術(shù),包括線程間同步的方法、多線程程序的分析步驟、線程基本程序結(jié)構(gòu)以及實用編譯方法。
關(guān)鍵詞:QNX;多線程;同步;程序結(jié)構(gòu)
0引言:
QNX是由加拿大QNX軟件有限系統(tǒng)公司開發(fā)的一種多任務(wù)、分布式、可嵌入的實時操作系統(tǒng)。它有著輕巧的微內(nèi)核,可以對進(jìn)程進(jìn)行全面的地址保護(hù),可剪裁,模塊化程度高,實時性強,安全可靠。符合POSIX標(biāo)準(zhǔn)的API使它成為一個開放式互聯(lián)系統(tǒng),便于與UNIX/LINUX系統(tǒng)的移植。QNX有著不同于UNIX或LINUX的模塊化設(shè)計思想,并不是UNIX或LINUX的一種演化,而是完全不同的一種全新的實時操作系統(tǒng)。由于其獨特的體系結(jié)構(gòu),QNX廣泛應(yīng)用于嵌入式系統(tǒng)、機器人工程、工業(yè)控制、航空航天等各個領(lǐng)域。
在QNX中,線程是一個單一的控制執(zhí)行流。從程序的最低層角度考慮,線程包括當(dāng)前指令位置指針(也稱為計數(shù)器或PC)、棧頂指針(SP)和一些寄存器,而進(jìn)程占據(jù)一定的內(nèi)存空間,是一個或多個線程的集合。在同一進(jìn)程中的線程共享許多資源,在QNX系統(tǒng)中共享的資源有:內(nèi)存中儲存在棧區(qū)以外的變量——即非局部變量;信號處理器;信號忽略屏蔽字;通道——建立于服務(wù)器端;連接——建立于客戶端,而在不同進(jìn)程中的線程除了CPU之外,幾乎不共享任何資源。當(dāng)然QNX提供了shm_open()函數(shù)來使不同進(jìn)程中的線程共享一段內(nèi)存。
在早期的QNX版本如QNX4中,對于線程的支持是比較弱的,在當(dāng)時的條件下,處理大型、復(fù)雜的并發(fā)多任務(wù)問題時,常常將問題分解為多個進(jìn)程以降低問題的復(fù)雜性。而且QNX提供了與UNIX類似的進(jìn)程間通訊IPC手段如消息、代理、信號燈等,功能也相對比較成熟、完善。1999年以后 QNX軟件公司推出了QNX/Neutrino實時操作系統(tǒng)的Neutrino2.0、Neutrino6.0增加了對于POSIX線程的支持,標(biāo)準(zhǔn)的API不但使它易于擴(kuò)展,而且也使得編寫多線程程序變得容易。由于線程具上下文較輕、切換較快、在創(chuàng)建多個線程時系統(tǒng)的開銷比較小、通訊手段靈活多樣、共享資源豐富等優(yōu)點,在處理大型并發(fā)多任務(wù)問題時多線程有了明顯的優(yōu)勢。QNX是搶先式多任務(wù)系統(tǒng),這種系統(tǒng)決定了多個線程在訪問共享資源時線程執(zhí)行的次序變得不可預(yù)期,所以線程間的同步就顯得極為重要。QNX提供了多種同步機制以保證多線程程序的安全、可靠。
1 QNX多線程庫函數(shù)簡介
QNX與LINUX不同,沒有單獨的線程庫,與線程有關(guān)的API是作為C語言庫函數(shù)的一部分使用的,頭文件是,同樣方便地提供線程的創(chuàng)建、終止和同步等功能。QNX不僅在C語言庫函數(shù)中提供了符合POSIX1003.1c標(biāo)準(zhǔn)的與線程相關(guān)的API,而且還提供了很多POSIX標(biāo)準(zhǔn)沒有的擴(kuò)展功能,使得多線程編程變得更加容易。
1.1線程的創(chuàng)建、取消和終止
1.11線程的創(chuàng)建
QNX通過pthread_create()函數(shù)創(chuàng)建線程,API定義如下:
int pthread_create(
[1] [2] [3] [4] [5]
【QNX環(huán)境下多線程編程】相關(guān)文章:
編程的心得03-14
給機器編程04-28
網(wǎng)絡(luò)環(huán)境下的歷史教學(xué)04-30
極端環(huán)境下的生命奇跡04-25
環(huán)境政治視角下的環(huán)境全球治理探析04-26
A-SMGCS中基于QNX平臺的車載終端的設(shè)計研究04-30
數(shù)控編程心得05-07
編程語言排名04-29