簡體   English   中英

cpp主體線程本地的函數安全嗎? 如果是這樣,從中調用靜態函數呢?

[英]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.

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