簡體   English   中英

C# - 參數在靜態方法中是否安全?

[英]C# - Are Parameters Thread Safe in a Static Method?

這個方法是線程安全的嗎? 好像它不是......

public static void Foo(string _str, Guid _id)
{
    _str = _str + _id.ToString();

    /*
        Do Stuff 
    */

    return 
}

在這種情況下,參數是兩個不可變的值。 在一個方法中,只有一個線程在該參數集上運行,因為調用該方法的多個線程將各自擁有自己的堆棧和執行上下文,這意味着每個線程都有自己獨立的參數集和局部變量,所以沒有其他線程可以影響那些變量。

因此, 就這兩個變量而言 ,這是完全線程安全的。

請注意, ref傳遞參數不一定是線程安全的,因為這可能允許在兩個或多個線程之間共享單個變量,這需要同步。

此外,如果將不可變的引用類型實例(即:自定義類)作為參數傳遞,則該類的內部狀態將需要同步,因為它可能被多個線程使用。 引用本身是線程安全的,因為它作為副本傳遞(除非使用ref傳遞)。

根據定義,參數本身是線程安全的。 方法是否是static無關緊要。

但它們可能是對其他數據的引用,並且不是自動線程安全的。

您的示例使用值類型和不可變引用類型,因此這種特殊情況是正常的。

暫無
暫無

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

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