在前面的博文中討論了進程的相關概念,這裏從新引入一下‘線程’的概念。進程有各自獨立的地址空間,因此進程間的通訊是比較麻煩的,只能藉助管道等纔可以實現進程間通訊。而linux系統中,多個線程共享進程的地址空間(也能夠說是進程是一個獨佔資源的線程),因此線程之間的通訊是很是方便的。linux
注:如下只針對linux系統。ide
★進程與線程的比較函數
在linux系統中,線程和進程之間的區分不是特別明顯,可是它們之間仍是有一些區別的:spa
(1)進程是系統資源分配的基本單位,線程是系統調度的基本單位。線程
(2)每一個進程都有本身獨立的地址空間,而線程之間的資源是共享的。blog
(3)進程間切換的系統開銷較線程間切換的系統開銷大。進程
(4)線程也有本身的私有棧,保存一些私有資源。資源
★線程建立和終止get
頭文件:#include <pthread.h>it
建立: int pthread_create(pthread_t* thread, const pthread_attr_t* attr, void* (*start_routine)(void*), void* arg);
終止: void pthread_exit(void* retval);
等待: int pthread_join(pthread_t thread, void** retval);
其中:終止線程有如下幾種方法:
①從線程函數進行return。可是在主線程中return至關於終止整個進程。
②一個線程能夠調用pthread_cancel終止同一進程中的另外一個線程。
③線程能夠調用pthread_exit終止本身。
例:
運行結果:
例:
運行結果:
★線程分離
int pthread_detach(pthread_t thread);
線程是能夠進行分離的,線程能夠分離本身,也能夠分離子線程。一個分離後的線程是不能被其餘線程回收的,它的資源是在它終止時由系統進行釋放,可是當主線程退出後,分離的線程也將會退出,資源會由系統自動釋放。
例:
運行結果: