歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix資訊 >> 初步講解Unix 線程知識

初步講解Unix 線程知識

日期:2017/3/6 11:40:56   编辑:Unix資訊

今天我們來學習下Unix 線程的知識。首先我們來了解下什麼是Unix 線程呢?Unix 線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.

一個Unix 線程可以創建和撤銷另一個Unix 線程;同一個進程中的多個Unix 線程之間可以並發執行。

在Unix 中,一個進程讓另外實體進行某項事務而采取的操作為fork的一個子進程,子進程只是將父進程的數據區拷貝一份到自己的數據區。在符合POSIX標准的Unix 操作系統下,同一個進程的Unix 線程之間共享進程指令、大多數數據(線程私有數據除外)、信號處理方式、進程運行環境等。由於線程共享進程的全局變量,因此可以采用用戶自己編寫的消息隊列來實現數據的共享。

建立多任務模型,並用Unix 線程來實現

符合POSIX標准的UNIX操作系統提供了Unix 線程的控制函數,如:Unix 線程的創建和終止、線程之間的互斥、線程之間的同步等。利用這些系統函數可以成功地模擬消息隊列,來實現線程間數據共享和同步,以完成多任務的實時性。為成功地描述線程間數據共享和同步,以下列任務模型為例。

首先建立消息隊列屬性數據結構

  1. #define MAXQUEUE 30
  2. typedef struct mq_attrib {
  3. char name[20];
  4. pthread_mutex_t mutex_buff;
  5. pthread_mutex_t mutex_cond;
  6. pthread cond_t cond;
  7. int maxElements;
  8. int elementLength;
  9. int curElementNum;
  10. caddr_t buff;
  11. }mq_attrib,mq_attribstruct,mq_attrib_t;
  12. mq_attrib_t msqueue[MAXQUEUE];

數據結構定義了消息隊列的名字name,最大消息個數maxElements,單個消息長度elementLength,當前消息個數curElementNum,存放消息的緩沖區buff,保護緩沖區鎖mutex_buff,線程同步條件變量cond,保護線程同步條件變量鎖mutex_cond。

一些基本的Unix 線程的知識,我們這次就介紹到這裡,我們以後會有更多的Unix 線程的知識的介紹的,請大家繼續關注。

Copyright © Linux教程網 All Rights Reserved