可重入與執行緒安全

2021-08-17 01:28:19 字數 493 閱讀 9252

概念

可重入性

class counter

void increment()

void decrement()

intvalue() const

private:

int n;

};

counter類是可重入,但不是執行緒安全的。

因為++和–操作符不是原子性的,它們通常要經歷以下三個步驟:

暫存器讀取記憶體中變數的值

增加或減少暫存器的值

將暫存器寫回記憶體

執行緒安全

class counter

void increment()

void decrement()

private:

int n;

};

lock和unlock是原子性的,使用鎖機制,令共享資料被多個執行緒有序地訪問,從而保證了執行緒安全性。

可重入與執行緒安全

之前一直糾結可重入與執行緒安全的區別,今天詳細查了一下。其實根據兩個概念的名字就可以得出結論,可重入就是重複多次結果都是一樣的,而執行緒安全則不一樣,只要不同執行緒執行的時候不會出現因不同執行緒執行順序不同而結果不同就可以。大多數情況下,要將不可重入函式改為可重入的,需要修改函式介面,使得所有的資料...

執行緒安全與可重入

1 什麼是執行緒安全 當乙個函式被多個執行緒反覆呼叫的時候,他會一直產生正確的結果,那麼這個函式就是執行緒安全的。執行緒安全函式解決了多個執行緒呼叫函式時訪問臨界資源的衝突問題。2 可重入 在多執行緒或有異常控制流的情況下,當某個函式執行到中途時,控制流有可能被打斷去執行另乙個函式,而這 另乙個函式...

可重入與執行緒安全

乙個執行緒安全的函式可以同時被多個執行緒呼叫,即便是這些呼叫使用了共享資料。因為該共享資料的所有例項都被序列化了。乙個可重入的函式也可以同時被多個執行緒呼叫,但是只能是在每個呼叫使用自己的資料時。因此,乙個執行緒安全的函式總是可重入的,但是乙個可重入的函式不總是執行緒安全的。推而廣之,如果只要每個執...