五 科大軟體工程(孟寧)(5 多執行緒)

2021-08-29 08:05:48 字數 1295 閱讀 9405

對於程式設計師來講多執行緒意味著什麼?

多執行緒函式的可重入性(reentrant)

執行緒安全

可重入的函式是執行緒安全的嗎?

用互斥鎖讓linktable中所有函式可重入

互斥鎖如何使linktable執行緒安全呢?

讀寫鎖什麼是函式的可重入性?

可重入(reentrant)函式可以由多於乙個任務併發使用,

而不必擔心資料錯誤。相反,不可重入(non-reentrant)

函式不能由超過乙個任務所共享,除非能確保函式的互斥

(或者使用訊號量,或者在**的關鍵部分禁用中斷)。

可重入函式可以在任意時刻被中斷,稍後再繼續執行,不會丟失資料。

可重入函式要麼使用本地變數,要麼在使用全域性變數時保護自己的資料。

可重入函式:

這就不是乙個可重入函式

int a = 0;

public void sat()

對比一下

這就是乙個可重入函式

不為連續的呼叫持有靜態資料。

不返回指向靜態資料的指標;所有資料都由函式的呼叫者提供。

使用本地資料,或者通過製作全域性資料的本地拷貝來保護全域性資料。

絕不呼叫任何不可重入函式。

什麼是執行緒安全?

如果你的**所在的程序中有多個執行緒在同時執行,

而這些執行緒可能會同時執行這段**。

如果每次執行結果和單執行緒執行的結果是一樣的,

而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。

執行緒安全問題都是由全域性變數及靜態變數引起的。若每個執行緒中對全域性變數、靜態變數只有讀操作,而無寫操作,一般來說,這個全域性變數是執行緒安全的;若有多個執行緒同時執行讀寫操作,一般都需要考慮執行緒同步,否則就可能影響執行緒安全。

函式的可重入性與執行緒安全之間的關係

可重入的函式不一定是執行緒安全的;

可重入的函式在多個執行緒中併發使用時是執行緒安全的,但不同的可重入函式(共享全域性變數及靜態變數)在多個執行緒中併發使用時會有執行緒安全問題(可能是執行緒安全的也可能不是執行緒安全的);

不可重入的函式一定不是執行緒安全的;

軟體工程(五)

橫向分解 將乙個問題分解成多個子問題 縱向分解 子問題在進行分解,一直分解到不能再進行分解了 軟體需求規格說明的原則 從現實中分離功能,即描述要做什麼而不是怎樣實現 要求使用面向處理的規格說明語言 資料流圖 描述資料邏輯模型的流程圖,不同的符號表示不同的功能 資料流圖的層次結構 為了表達資料處理過程...

北大軟體工程 第一周 軟體工程概論

1單選 2分 軟體產品與物質產品有很大的區別,軟體產品是一種 c 產品。2多選 2分 下列關於軟體的說法正確的是 bcd 3多選 2分 下列軟體屬於系統軟體的是 ab 4多選 2分 下述軟體屬於支撐軟體的是 cd 5多選 2分 下述軟體屬於應用軟體的是 ad 1填空 2分 軟體工程概念的提出是為了解...

軟體工程(五)UML

uml 統一建模語言,又稱標準建模語言。是用來對軟體密集系統進行視覺化建模的一種語言。包括uml語義和uml表示法兩個元素。uml圖由事物和關係組成,事物 uml模型中最基本的構成元素,是具有代表性的成分的抽象 關係 關係把事物緊密聯絡在一起。通過圖形化的表示機制從多個側面對系統的分析和設計模型進行...