執行緒安全函式和可重入函式

2021-05-22 03:21:01 字數 499 閱讀 2947

執行緒安全函式:多個執行緒反覆呼叫乙個函式,它會一直產生乙個正確結果;

如何確保執行緒安全:處於同一程序的所有執行緒共享程序記憶體空間的全域性區和堆,而私有的執行緒空間則包括棧和暫存器,對於同一程序的不同執行緒來說,每個執行緒的區域性變數都是私有的,而全域性變數、區域性靜態變數、分配於堆的變數都是共享的。在對這些共享變數進行訪問時,如果要保證執行緒安全,則必須通過加鎖的方式。

執行緒不安全的後果:由於共享變數被不同執行緒訪問,導致共享變數發生不可預料的錯誤,會導致程式的錯誤,甚至崩潰。

可重入函式:我的理解就是乙個可以被多個任務呼叫的函式,在呼叫的過程中資料不會出錯(可能理解不是很對);

如何確保可重入函式:

1.不在函式內部使用靜態或全域性資料;

2.不返回靜態或全域性資料,所有資料都由函式的呼叫者提供;

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

4.不呼叫不可重入函式;

一般來說,可重入的函式一定是執行緒安全的,但執行緒安全函式不一定是可重入函式。

執行緒安全和可重入函式

執行緒安全 當多個併發執行緒執行同乙個函式,我們都能得到正確的返回值。當多個執行緒併發的呼叫乙個函式。如果對全域性資料或者靜態資料在不加任何鎖以及安全性的處理情況下,就會對多次修改資料的錯誤。比如我正在願意個執行緒裡處理乙個全域性變數的 1 正減完。結果還沒有返回,就被另乙個執行緒切出去了,而那個執...

執行緒安全和可重入函式

執行緒安全 乙個函式稱為執行緒安全,當且僅當被多個併發執行緒反覆呼叫時,它一直產生正確的結果。如果乙個函式不是執行緒安全的,我們就說它是執行緒不安全的。以下我們定義4種,執行緒不安全的函式 第1類 不保護共享變數的函式,比如對乙個全域性變數多個執行緒操作,產生錯誤結果 解決方法 利用像p,v操作這樣...

執行緒安全和可重入函式

簡單來說,在執行環境一致的情況下,多次執行同乙個多執行緒程式時,所有執行緒結果和單執行緒執行得到的結果一致時,則可以說該程式的執行緒是安全的。反之,則為執行緒不安全。引起執行緒安全問題的原因 通常都是由全域性變數及靜態變數的。若每個執行緒中對全域性變數 靜態變數只有讀操作,而無寫操作,一般來說,這個...