1. 程式人生 > >2018-2019-1 20165202 《資訊安全系統設計基礎》第八週學習總結

2018-2019-1 20165202 《資訊安全系統設計基礎》第八週學習總結

本週學習內容

一、執行緒概念

執行緒就是是程式的一個控制流程,從程式碼的角度來看,它控制著一個函式的執行;

說複雜點,在linux下,它就是一個程序(僅限linux),因為在linux下對於執行緒並沒有特別的資料結構去描述它。

簡而言之,執行緒是程式碼的一個執行流。

二、執行緒與程序的區別

執行緒與程序的區別,總結一下有以下區別:

  • 1.執行緒強調的是資源共享,因為與主執行緒共享PCB;程序強調的是獨立性,因為每個獨立的程序有各自獨立的PCB。

  • 2.也正因為如此,建立一個執行緒的開銷要比建立程序的開銷要小。

  • 3.多執行緒程式,只要有一個執行緒出現異常,其他執行緒都會被"誅連",導致程式異常出錯。多程序程式,各程序之間獨立,不會彼此影響。

三、執行緒控制

因為執行緒不屬於系統呼叫,因此需要用到pthread.h庫。

1.建立執行緒

#include <pthread.h>
int pthread_create(pthread_t *thread,pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);
//thread:執行緒id,返回型引數
//attr:執行緒屬性
//start_routine:所要執行的的函式(返回值void*,引數為void*)
//arg:函式的引數

2.終止執行緒

有三種方法可以終止一個執行緒:

  • a.通過return返回,對主執行緒不適用。

  • b.一個執行緒可以呼叫pthread_cancel終止其它執行緒。

  • c.呼叫pthread_exit終止自己。

void pthread_exit (void*retval);
//retval:返回值,可以返回給pthread_join函式

3.執行緒等待

根據執行緒的終止情況不同,pthread_join有以下三種情況:

  • a.如果執行緒通過return返回,則retval中存放執行緒的返回值。

  • b.如果執行緒被異常終止,則retval中存放的是PTHREAD_CANCELED。

  • c.如果執行緒通過pthread_exit終止,則retval中存放的是pthread_exit的引數。

int pthread_join(pthread_t pthread,void **retval);
//pthread:需要等待的執行緒id
//retval:帶回的引數
//成功返回0,失敗返回錯誤號

4.執行緒的分離與結合

對於任意時間點,執行緒都是可分離的或者可結合的。

可結合的執行緒可以被其他執行緒收回資源或者殺死,在其他執行緒回收資源之前,它的資源是不會被釋放的。

可分離的執行緒不能被其他執行緒回收或殺死,其資源是自動釋放的。

預設情況下,執行緒都是可結合的。

如果一個可結合的執行緒執行完畢,沒有被其他執行緒回收資源,那麼它就會導致類似於殭屍程序的情況。

當有執行緒呼叫pthread_join回收其它執行緒時,如果其他執行緒沒有執行結束,則呼叫者會阻塞,為了避免這種情況,我們可以將該執行緒分離出去。

分離執行緒需要呼叫:

int pthread_detach(thread_id);    //一般是分離自己pthread_detach(pthread_self);

這樣的話,就不必主執行緒去回收其資源,該執行緒執行完畢,會自動釋放所有的資源。


本週學習問題總結

問題1:

作業系統的問題:使用者級執行緒和核心級執行緒的區別聯絡?

解決方案1:

1.核心級執行緒:切換由核心控制,當執行緒進行切換的時候,由使用者態轉化為核心態。切換完畢要從核心態返回使用者態;可以很好的利用smp,即利用多核cpu。windows執行緒就是這樣的。

2.使用者級執行緒核心的切換由使用者態程式自己控制核心切換,不需要核心干涉,少了進出核心態的消耗,但不能很好的利用多核Cpu,目前Linux pthread大體是這麼做的。


課堂測試補交

2017-2018-1 20155313 《資訊安全系統設計基礎》第八週課堂測試


學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 20篇 400小時
第一週 100/100 1/1 5/5
第二週 100/200 2/3 5/10
第三週 100/300 2/5 5/15
第四周 100/400 1/6 5/20
第六週 100/500 1/7 5/25
第七週 100/600 1/8 5/30
第八週 800/1400 3/11 10/40

參考資料

作業系統相關——作業系統執行緒基礎知識