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