[英]Are functions local to a cpp body thread safe? If so what about calling static functions from it?
自從引入第二個工作線程以來,我遇到了很多多線程錯誤。 這些問題很小,很難追蹤。 我的最新跡象表明
class MyOtherClass {
static String defaultName;
static String getDefaultName() {return defaultName;}
}
由以下人員使用:
result plainLocalFunction() {
result r = E_SUCCESS;
String fallbackName = MyOtherClass::getDefaultName();
//Do other stuff with locals.
return r;
}
我已經調試了很久了,我只能假設plainLocalFunction
是在線程之間共享其plainLocalFunction
變量,或者對getDefaultName()
的調用涉及寫入不是線程安全的靜態變量? 謝謝你的時間。
函數內的靜態變量會使您的函數無法重入並且也不是線程安全的。
如果函數中只有局部變量,則每個線程堆棧將擁有自己的那些變量副本,並且該函數將是線程安全的。
如果您對靜態變量進行寫操作,則它們絕對不是線程安全的(此處為defaultName)。 讀取(如果沒有人寫的話)應該可以,而且我不認為如果其中沒有發生線程不安全的事情,則調用靜態函數(或動態的函數)不會導致線程不安全。
使用CriticalSections (例如)來保護由多個線程使用的變量(並且可能至少有一個線程可以寫入該變量)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.