對於程式設計師來講多執行緒意味著什麼?
多執行緒函式的可重入性(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模型中最基本的構成元素,是具有代表性的成分的抽象 關係 關係把事物緊密聯絡在一起。通過圖形化的表示機制從多個側面對系統的分析和設計模型進行...