初步講解Unix 線程知識
今天我們來學(xué)習(xí)下Unix 線程的知識。首先我們來了解下什么是Unix 線程呢?Unix 線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個Unix 線程可以創(chuàng)建和撤銷另一個Unix 線程;同一個進程中的多個Unix 線程之間可以并發(fā)執(zhí)行。
在Unix 中,一個進程讓另外實體進行某項事務(wù)而采取的操作為fork的一個子進程,子進程只是將父進程的數(shù)據(jù)區(qū)拷貝一份到自己的數(shù)據(jù)區(qū)。在符合POSIX標準的Unix 操作系統(tǒng)下,同一個進程的Unix 線程之間共享進程指令、大多數(shù)數(shù)據(jù)(線程私有數(shù)據(jù)除外)、信號處理方式、進程運行環(huán)境等。由于線程共享進程的全局變量,因此可以采用用戶自己編寫的消息隊列來實現(xiàn)數(shù)據(jù)的共享。
建立多任務(wù)模型,并用Unix 線程來實現(xiàn)
符合POSIX標準的UNIX操作系統(tǒng)提供了Unix 線程的控制函數(shù),如:Unix 線程的創(chuàng)建和終止、線程之間的互斥、線程之間的同步等。利用這些系統(tǒng)函數(shù)可以成功地模擬消息隊列,來實現(xiàn)線程間數(shù)據(jù)共享和同步,以完成多任務(wù)的實時性。為成功地描述線程間數(shù)據(jù)共享和同步,以下列任務(wù)模型為例。
首先建立消息隊列屬性數(shù)據(jù)結(jié)構(gòu)
- #define MAXQUEUE 30
- typedef struct mq_attrib {
- char name[20];
- pthread_mutex_t mutex_buff;
- pthread_mutex_t mutex_cond;
- pthread cond_t cond;
- int maxElements;
- int elementLength;
- int curElementNum;
- caddr_t buff;
- }mq_attrib,mq_attribstruct,mq_attrib_t;
- mq_attrib_t msqueue[MAXQUEUE];
數(shù)據(jù)結(jié)構(gòu)定義了消息隊列的名字name,最大消息個數(shù)maxElements,單個消息長度elementLength,當前消息個數(shù)curElementNum,存放消息的緩沖區(qū)buff,保護緩沖區(qū)鎖mutex_buff,線程同步條件變量cond,保護線程同步條件變量鎖mutex_cond。
一些基本的Unix 線程的知識,我們這次就介紹到這里,我們以后會有更多的Unix 線程的知識的介紹的,請大家繼續(xù)關(guān)注。
【編輯推薦】