系統調度—‘線程’

    在前面的博文中討論了進程的相關概念,這裏重新引入一下‘線程’的概念。進程有各自獨立的地址空間,所以進程間的通信是比較麻煩的,只能藉助管道等才能夠實現進程間通信。而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終止自己。


例:

wKioL1ebAEqgAIQiAAC2IfliVkE888.png

運行結果:

wKiom1ea__DS8RiCAAAX4LFcCk0239.png


例:

wKioL1ebSbvSkpJTAACQnqq98Ug677.png

wKiom1ebShCi2yS0AACkh5q55mw437.png

運行結果:

wKioL1ebSqaRpgWuAAAuB4qKT7E824.png


★線程分離

     int pthread_detach(pthread_t thread);

     線程是可以進行分離的,線程可以分離自己,也可以分離子線程。一個分離後的線程是不能被其他線程回收的,它的資源是在它終止時由系統進行釋放,但是當主線程退出後,分離的線程也將會退出,資源會由系統自動釋放。


例:

wKiom1ebT8GzR7l7AADS3s6b60w415.png

wKiom1ebUHfg7Qf-AAAM0KHQ1nk458.png

運行結果:

wKiom1ebUb2B1o42AAASvGerPLM093.png



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