在前面的博文中討論了進程的相關概念,這裏重新引入一下‘線程’的概念。進程有各自獨立的地址空間,所以進程間的通信是比較麻煩的,只能藉助管道等才能夠實現進程間通信。而linux系統中,多個線程共享進程的地址空間(也可以說是進程是一個獨佔資源的線程),所以線程之間的通信是非常方便的。
注:以下只針對linux系統。
★進程與線程的比較
在linux系統中,線程和進程之間的區分不是特別明顯,但是它們之間還是有一些區別的:
(1)進程是系統資源分配的基本單位,線程是系統調度的基本單位。
(2)每個進程都有自己獨立的地址空間,而線程之間的資源是共享的。
(3)進程間切換的系統開銷較線程間切換的系統開銷大。
(4)線程也有自己的私有棧,保存一些私有資源。
★線程創建和終止
頭文件:#include <pthread.h>
創建: 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);
線程是可以進行分離的,線程可以分離自己,也可以分離子線程。一個分離後的線程是不能被其他線程回收的,它的資源是在它終止時由系統進行釋放,但是當主線程退出後,分離的線程也將會退出,資源會由系統自動釋放。
例:
運行結果: