系統調度—‘線程’

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


例:

wKioL1ebAEqgAIQiAAC2IfliVkE888.png

運行結果:

wKiom1ea__DS8RiCAAAX4LFcCk0239.png


例:

wKioL1ebSbvSkpJTAACQnqq98Ug677.png

wKiom1ebShCi2yS0AACkh5q55mw437.png

運行結果:

wKioL1ebSqaRpgWuAAAuB4qKT7E824.png


★線程分離

     int pthread_detach(pthread_t thread);

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


例:

wKiom1ebT8GzR7l7AADS3s6b60w415.png

wKiom1ebUHfg7Qf-AAAM0KHQ1nk458.png

運行結果:

wKiom1ebUb2B1o42AAASvGerPLM093.png

相關文章
相關標籤/搜索