點擊藍字 關注我們 線程的概念 我們今天來聊一聊線程,之前有寫過一篇關于進程的文章,今天我們聊的線程,和進程差不多,我們首先要知道的一件事情是一個進程里面可以包括多個線程,不能反過來,我們之前了解到的不同進程可以做不一樣的事情,我們舉一個簡單易懂的例子:我們的電腦上面有很多的應用程序,微信、QQ,酷狗音樂等等,我們運行一個應用程序就有一個進程,那什么是線程呢?比如其中一個,我們打開了酷狗音樂,打開音樂聽著,這時候你覺得歌好聽你就去看評論,這時候你想一下:播放音樂,看評論。是兩件事情,但是都可以同時進行,那這里我們說酷狗音樂是一個進程,聽音樂和看評論是它下面的兩個線程。 你要記住單進程里面執(zhí)行多個任務,這就是線程。 線程原理圖 線程的標識 我們之前說的進程有一個唯一的標識,我們今天說的線程也是一樣的我們的進程標識是pit_t數(shù)據(jù)類型來表示,我們的線程是用pthread_t數(shù)據(jù)類型來表示。獲取自己的線程標識我們用函數(shù)pthread_self(); 線程創(chuàng)建 在外面沒有創(chuàng)建新的線程的時候,運行的時候他和普通進程沒沒有什么區(qū)別。我們創(chuàng)建出來的線程是共享全部變量在子線程改變?nèi)肿兞磕敲粗骶€程也會被改變,這一點一會我們可以驗證一下。 創(chuàng)建新線程可以使用函數(shù)pthread_create()來創(chuàng)建,我們來看看看書的主要參數(shù): 參數(shù)1:pthread_t *tid 傳出參數(shù),表示新創(chuàng)建的子線程ID。 參數(shù)2:const pthread_attr_t *attr 線程屬性,傳入NULL表示使用默認屬性 參數(shù)3:void *(*start_rountn)(void *) 子線程的回調(diào)函數(shù),創(chuàng)建成功,pthread_create函數(shù)返回時,該函數(shù)會被自動調(diào)用; 參數(shù)4:void *arg 給回調(diào)函數(shù)傳的參數(shù),如果函數(shù)不需要傳參傳NULL. 代碼實現(xiàn)
我們看一下下面程序執(zhí)行的結果,我們可以看出來兩個進程號是一樣的,但是線程號卻不一樣。 另外一個值得我們注意的是我們的全局變量a我們在定義的時候值是10,然后我們在線程里面把值改為了100,最后打印出來的結果驗證了我們前面說的線程是共享全局變量的。 線程與進程 線程分離 int pthread_detach(pthread_t thread); 設置線程分離,使用detach分離線程,分離后的線程會自動回收。 參數(shù): thread 是要分離的線程ID。 成功返回0,失敗返回errno。 線程退出 pthread_exit 退出 void pthread_exit(void *retval); 退出當前線程。 retval:退出值。 無退出值時,NULL exit(); 退出當前進程。 return: 返回到調(diào)用者那里去。pthread_exit(): 退出當前線程。 結語 關于線程的使用不僅于此,在線程編程中還有很多重要的知識,后期再更新對線程更深入地探討。 |
D-Think_ZT01加強型芯片注射器,PIT連續(xù)注
D-Think_ZT01-14T 1.4*8mm FDX-B植入式生物