linux線程學習(1)

什麼是線程及爲什麼要有線程?

有時又稱輕量級進程,程序執行的最小單位,系統獨立調度和分派cpu的基本單位,它是進程中的一個實體。一個進程中可以有多個線程,這些線程共享進程的所有資源。
進程出現了很多弊端,一是由於進程是資源擁有者,創建、撤消與切換存在較大的時空開銷,因此需要引入輕型進程(即線程);二是由於對稱多處理機(SMP)出現,可以滿足多個運行單位,而多個進程並行開銷過大。
多線程的優勢:
1、在多處理器中開發程序的並行性
2、在等待慢速IO操作時,程序可以執行其他操作,提高併發性
3、模塊化的編程,能更清晰的表達程序中獨立事件的關係,結構清晰
4、佔用較少的系統資源

關於線程的一些術語

  1. 併發:併發是指在同一時刻,只能有一條指令執行,但多個進程指令被快速輪換執行,使得在宏觀上具有多個進程同時執行的效果。 看起來同時發生(這裏是在單核的基礎上)。
  2. 並行是指在同一時刻,有多條指令在多個處理器上同時執行。真正的同時發生
  3. 同步:彼此有依賴關係的調用不應該“同時發生”,而同步就是要阻止那些“同時發生”的事情
  4. 異步的概念和同步相對,任何兩個彼此獨立的操作是異步的,它表明事情獨立的發生

線程的創建

線程與進程的對比:
這裏寫圖片描述

  • pthread_t:是一個unsigned long int類型。
  • 獲取線程id:pthread_self()獲得調用pthread_self()函數的線程的線程id,與getpid()類似,getpid()是獲得進程id。
  • 創建線程:pthread_create()
int pthread_create(pthread_t *restrict tidp, 
                             const pthread_attr_t *restrict attr, 
                             void *(*start_routine)(void *), 
                             void *restrict arg)

第一個參數:新線程的id,如果成功則新線程的id回填充到tidp指向的內存
第二個參數:線程屬性(調度策略,繼承性,分離性…)
第三個參數:回調函數(新線程要執行的函數)
第四個參數:回調函數的參數
返回值:成功返回0,失敗則返回錯誤碼

編譯時需要連接庫lib pthread
注意:
1、主線程是隨着進程的創建而創建
2、其他線程可以通過調用函數來創建,主要調用pthread_create
3、請注意,新線程可能在當前線程從函數pthread_create返回之前就已經運行了,甚至新線程可能在當前線程從函數pthread_create返回之前就已經運行完畢了。

下篇文章具體分析函數pthread_create。

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