執行緒安全:當多個併發執行緒執行同乙個函式,我們都能得到正確的返回值。
當多個執行緒併發的呼叫乙個函式。如果對全域性資料或者靜態資料在不加任何鎖以及安全性的處理情況下,就會對多次修改資料的錯誤。比如我正在願意個執行緒裡處理乙個全域性變數的-1;正減完。結果還沒有返回,就被另乙個執行緒切出去了,而那個執行緒全域性變數還是處於沒有被處理的-1的值;本身我想讓那個全域性變數執行兩次-1;結果執行了一次。
所以這就是執行緒不安全。
確保執行緒安全:
要確保函式執行緒安全,主要需要考慮的是執行緒之間的共享變數。
屬於同一程序的不同執行緒會共享程序記憶體空間中的全域性區和堆,而私有的執行緒空間則主要包括棧和暫存器。因此,對於同一程序的不同執行緒來說,每個執行緒的區域性變數都是私有的,而全域性變數、區域性靜態變數、分配於堆的變數都是共享的。在對這些共享變數進行訪 問時,如果要保證執行緒安全,則必須通過加鎖的方式。
可重入函式:是執行緒安全的一中。它是執行緒安全函式的乙個真子集。
特點:當它們被多個執行緒呼叫時,不會引用任何共享資料,也就是不引用靜態或全域性變數。
可重入函式的條件
1,不在函式內部使用靜態或者全域性資料
2,不返回靜態或者全域性資料,所有的資料都由函式呼叫者提供
3,使用本地資料,或者通過製作全域性資料的本地拷貝來保護全域性資料
4, 如果必須訪問全域性資料,使用互斥鎖來保護
5,不呼叫不可重入函式
執行緒安全和可重入函式
執行緒安全 乙個函式稱為執行緒安全,當且僅當被多個併發執行緒反覆呼叫時,它一直產生正確的結果。如果乙個函式不是執行緒安全的,我們就說它是執行緒不安全的。以下我們定義4種,執行緒不安全的函式 第1類 不保護共享變數的函式,比如對乙個全域性變數多個執行緒操作,產生錯誤結果 解決方法 利用像p,v操作這樣...
執行緒安全和可重入函式
簡單來說,在執行環境一致的情況下,多次執行同乙個多執行緒程式時,所有執行緒結果和單執行緒執行得到的結果一致時,則可以說該程式的執行緒是安全的。反之,則為執行緒不安全。引起執行緒安全問題的原因 通常都是由全域性變數及靜態變數的。若每個執行緒中對全域性變數 靜態變數只有讀操作,而無寫操作,一般來說,這個...
執行緒安全和可重入函式
執行緒安全 1.執行緒安全 就是多執行緒訪問時,採用了加鎖機制,當乙個執行緒訪問該類的某個資料時,進行保護,其他執行緒不能進行訪問直到該執行緒讀取完,其他執行緒才可使用。不會出現資料不一致或者資料汙染。2.執行緒不安全 就是不提供資料訪問保護,有可能出現多個執行緒先後更改資料造成所得到的資料受到汙染...