在多執行緒場景中,在 C# .net 中以下列方式同時宣告由多個執行緒讀取和設定的類的布爾屬性是否有意義?
public class MyClass
{
private long _check;
public bool Check
{
get => Interlocked.Read(ref _check) == 1;
set => Interlocked.Exchange(ref _check, Convert.ToInt64(value));
}
}
uj5u.com熱心網友回復:
您對 volatilebool欄位的實作過于復雜。您可以像這樣實作完全相同的事情:
private bool _check;
public bool Check
{
get => Volatile.Read(ref _check);
set => Volatile.Write(ref _check, value);
}
...甚至像這樣更簡單:
public volatile bool Check;
僅當您希望將前一個值作為原子操作獲取時,Interlocked.Exchange最好使用 。Volatile.Write否則Volatile.Write 效果相同,而且更輕量級。
首先,擁有這樣一個領域是否是一個好主意,取決于場景。如果您有一個回圈,并且您想將該欄位用作中斷機制,那么這可能是一個好主意。如果你想同步訪問你班級的其他一些共享狀態,它可能不是。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/467467.html
上一篇:如何列印倒數計時器并同時接受用戶輸入(python)?
下一篇:Java中如何同步快取讀寫操作
