線程簡單理解

線程的概念

有些情況需要一個進程同時執行多個控制流程,這時候線程就派上用場了,比如實現一個圖形界面的下載軟件,一方面需要和用戶交互,等待,和處理用戶鼠標鍵盤的事件,另一方面又需要同時下載多個文件,等待和處理從多個網路主機發來的數據,這些任務都需要一個“等待-處理”的循環,可以用多線程實現。

由於同一進程的多線程共享同一地址空間,因此Text segment Data segment都是共享的,如果定義了一個函數,在個線程中都可以調用,如果定義了一個全局變量,在個線程中都可以訪問,除此之外,個線程還共享一下進程資源和環境:
1. 文件描述符
2. 每種信號的處理方式(SIG——IGN,SIG_DFL或這自定的信號處理函數)
3. 當前工作目錄
4. 用戶id和組id
但有些資源是每個線程各有一份的:
1. 線程id
2. 上下文,包括寄存器的值,程序計數器和棧指針
3. 棧空間
4. errno變量
5. 信號屏蔽字
6. 調度優先級

線程控制

  1. 線程的創建:
    pthread_create這裏寫圖片描述
  2. 線程id的獲得:
    pthread_self()
    這裏寫圖片描述
    3.等待線程函數:線程和進程類似在線程退出時,棧空間不會被立刻釋放而是等待其他線程回收,如果不被回收就會形成類似殭屍進程
    pthread_join()
    這裏寫圖片描述
    4.我們學習的線程庫函數是由POSIX定義的,稱之爲POSIX thread.在linux上線程函數位於libpthread共享庫中因此在編譯時要加上-lpthread選項。
    這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

終止線程的三種方法:

  1. 從線程函數return,這種方法主線程不適用,從main函數return相當於調用exit:
  2. 一個線程可以調用pthread_cancel終止同一進程中的另一個線程:
    這裏寫圖片描述

這裏寫圖片描述
3. 線程可以調用pthread_exit終止自己:
這裏寫圖片描述

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章