簡體   English   中英

static 自由函數線程安全嗎?

[英]Are static free functions thread safe?

我正在編寫一個多線程程序,並且有一個 function 將從多個線程調用,該線程是一個 cpp 文件中的 static 免費 function。 這個 function 永遠不會從 cpp 文件外部調用,所以我想將其設為 static 以便它具有內部鏈接。

谷歌搜索我發現很多人說“靜態函數不是線程安全的”但是當我 go 閱讀它時,每個人似乎都在談論 static 成員函數,而不是 ZA81259CEF8E959C624DF1D456E

static 自由函數是否線程安全(假設它們不訪問線程之間的任何共享 state)?

任何不訪問共享 state 的 function 本質上都是線程安全的。 只有當您對共享 state 進行未受保護的讀/寫操作時,您才會遇到數據競爭。 如果沒有共享的 state,則不能進行數據競爭。

這就是為什么純函數式語言自然是線程安全的。 如果 function 沒有副作用,那么您可以在任意數量的線程中調用它。

Static 功能與其他功能相同。 這不是 function,而是 function 所做的。

我認為有些人在術語之間混淆。 static function 與 function 與 ZA81259CEF8E959C2297DF1D456E5D 變量。

雖然 static function 可能安全與否,但帶有 ZA81259CEF8565D 變量的 function 是不安全的。

這種 function 的一個示例是strtok ,它在 static 變量中保存連續點。 當多個線程使用舊的strtok時,可能會導致輸入之間的混合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM