天天看點

線程的建立pthread_create()函數(線程一)

一.并發 并行 同步 異步概念差別

并發:看起來像真正同時發生,實際并非同時發生,隻不過是cpu的排程時間很快,單核系統中每一時刻隻能執行一個程序,類似程序。

并行:真正意義上的同時發生,類似線程,但每個線程必須依賴于程序,(但按照作業系統理論嚴格來說,多線程并不是多個線程一起運作的.

因為多線程實際上是多個線程之間輪流執行的,就是将一個時間段分成若幹個時間片,每個線程隻運作一個時間片,由于時間片極短,而且電腦運作極快,線程之間切換也極快,幾乎可以看做是并行運作的,也就是說可以看成是同時運作的.但實際卻不是的同時運作的.

程序是執行程式的一次過程,程式是靜态的,程序是動态的。

同步:不應該同時發生,阻止其同時發生(加鎖)。

異步:獨立的操作是異步,事情獨立發生。

二.線程ID擷取

pthread_self()

線程的建立pthread_create()函數(線程一)
線程的建立pthread_create()函數(線程一)
線程的建立pthread_create()函數(線程一)

是以pthread_t是一個 無符号的長整數(Linux下),在mac下他是一個結構體

線程的建立pthread_create()函數(線程一)
線程的建立pthread_create()函數(線程一)

關于線程的程式編譯時候必須連結 pthread這個庫 –lpthread

三、線程建立

線程的建立pthread_create()函數(線程一)

線程建立函數四個參數解釋:

第一個參數:新線程ID,建立成功系統傳回。

第二個參數:新線程的屬性,NULL為預設屬性。

第三個參數:新線程的啟動函數 函數指針: 指向形參位void* 傳回值為void*類型的函數的指針。

void* thread_fun(void)

第四個參數:傳遞給新線程。

線程的建立pthread_create()函數(線程一)
線程的建立pthread_create()函數(線程一)

四、 pthread_exit()函數

pthread_exit() 與return 的差別

pthread_exit傳回給作業系統,主程序不會退出,新的線程才會執行。

return指直接傳回給程序,如果是主程序,則新線程不會執行。

線程的建立pthread_create()函數(線程一)

函數的形參是一個void *retval retval是一個作業系統回填。

線程的建立pthread_create()函數(線程一)
線程的建立pthread_create()函數(線程一)

五、線程的四個狀态:

就緒、阻塞、運作、終止。

線程的建立pthread_create()函數(線程一)

繼續閱讀