我发布了一个 earlier question关于返回集合,线程安全的话题出现了。我得到了这个 link做更多的阅读,我发现了这一行:
In general, avoid locking on a public type, or instances beyond your code's control.
首先,如果我错了请纠正我,但是 Microsoft 给出的锁定公共(public)类型 balance 变量的示例不是吗?
其次,我将如何锁定我自己的 getter/setter 属性。假设我有以下类(class):
private int ID;
public Person(int id)
{
this.Identification= id;
}
public int Identification
{
get { return this.ID; }
private set
{
if (value == 0)
{
throw new ArgumentNullException("Must Include ID#");
}
this.ID = value;
}
}
setter/getter 是公开的吗?只有 setter 被声明为私有(private)。那么,我将如何锁定或使我的 getter/setter 属性线程安全?
最佳答案
你应该像这样在 Person
类中定义一个变量
private readonly object _lock_ = new Object();
如果你想对 Person
的所有实例进行同步,你应该将其设为 static
。
然后当你想加锁的时候你可以这样做
lock(_lock_) //whose there? it's me, I kill you! oops sorry that was knock knock
{
//do what you want
}
我建议你阅读这篇文章:1
关于c# - 使自定义对象线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30734830/