當我們在談論XX是否執行緒安全時,我們在談論什麼?

時間 2021-05-06 13:53:49

1樓:

執行緒安全當然在不同的場景下有不同的定義。

當我們在談論『某一組 API 是執行緒安全的』時,我們實際上是在談論『某一組 API 在多執行緒環境下,使用者不必顯式地使用底層的同步機制(鎖、條件變數等等)』。

2樓:satanson

不用上知乎,只要參考任何一本作業系統教材書,看看程序管理,程序間通訊的內容章節,翻到同步原語和競爭條件的概念出處. 就知道教材的解釋勝過知乎回答幾十倍. 學會自己找答案, 既然問到這個問題,必然也聽過計算機基本基礎教材,看看吧,系統性地學習勝過零散的解答.

做最基礎的探索去溯源學習吧,許多答案講得很清楚了,但理解更多的context,需要系統性地把基礎紮牢.

3樓:孔乙己

void main()

兩個執行緒,乙個輸出11111……,另乙個輸出22222……,如果不論怎麼跑,兩條輸出都不打架(不會在同一行出現1212交叉的情況),我們基本可以說,它是執行緒安全的。當然這只是為初學者提供乙個直觀感受,並非標準定義,輕噴……

另外,即使執行一operactor《不會打架,也不代表執行多個《不會打架(而且肯定會打架)

分別在兩個執行緒裡執行如下:

cout<<1111<<1111<<1111

4樓:

以自己的經驗:

我們平常說的執行緒安全是指乙個函式在被多執行緒併發時能夠正常工作,一般乙個函式都會標識自己是執行緒安全還是非執行緒安全,這裡的執行緒安全是指這個。

還有一種是非同步安全(可重入):它比執行緒安全要求更加嚴格,不僅要在多執行緒併發時能夠正常工作,也需要在signal handler(軟中斷)函式中被呼叫,仍然能夠正常工作。可重入的函式一定是執行緒安全的函式,但是執行緒安全的函式並不一定是非同步安全安全的函式。

以上兩種標準在posix標準裡面都有定義。

最後提一種比較少見的執行緒安全的概念,這個概念在標準中並沒有定義,但是在linux多執行緒/多程序確實會遇到。

fork-safe: 我們知道linux裡面的fork函式會把父程序的記憶體資源全部複製,並且複製當前的執行fork函式的執行緒資源也複製乙份,父程序的其它執行緒資源就不再複製,如果其它執行緒剛好獲得乙個鎖,在沒有解鎖前被fork出來乙個子程序,那麼在子程序的鎖就沒有人去解它,子程序獲取該鎖的時候就會永遠等待在這個鎖上。

一般情況下我們不推薦多執行緒下fork子程序,但是由於某些原因不得不這麼做的時候,就要注意這些fork-unsafe的函式了,但是不幸的是這個概念並不是乙個比較明確的概念,一般庫函式都不會明確寫出自己是否是fork safe, 以前低版本glibc裡面的malloc就是乙個fork-unsafe的函式,但是高版本的glibc的malloc就是乙個fork-safe的函式

當我們在談論心靈時,我們在談論什麼?

王思淼 建議多看看佛教哲學理論。六祖慧能的詩詞是可以解釋這句 讓心靈得以平靜 的 菩提本無樹,明鏡亦非台 本來無一物,何處惹塵埃?當乙個人的修為達到無我境,開具慧眼,看待任何事情都能心如明鏡,那麼他的心靈一定是歸於平靜的。 心靈?那裡大概住著最美好最完美的自己吧,還有乙個很美麗的夢想。有一天老師說,...

當我們在談論工作時究竟在談論什麼

老包 準確地說,打工是在出賣自己的某些東西,如,勞動力,時間,腦力,創意 自己創業也是打工,甚至比打工要出賣的更多,如,健康,對家人的陪伴,甚至自尊 但是之所以很多人一門心思創業,原因是自己出賣了一些自己的東西以後,出賣得好,家人就不需要再出賣了。高收入的工作一定好,這是可以確定的,但是如果你是個低...

當我們談論 符合邏輯 時,我們在談論什麼?

英氣逼人 我不是邏輯相關專業的,也沒有高深的理論知識,但看著題主的問題,我想試著從乙個外行的角度來談談我對邏輯的看法。我對題主問題的理解是 由A大於B且B大於C可推導出A大於C,也就是說A大於C是A大於B且B大於C的推導結論,那麼在A大於B且B大於C得出A大於C的過程中,必然存在一定推導邏輯關係,使...