【发布时间】:2009-01-12 09:23:14
【问题描述】:
C# 中的字符串是不可变的和线程安全的。但是,当您拥有公共吸气剂属性时怎么办?像这样:
public String SampleProperty{
get;
private set;
}
如果我们有两个线程,第一个在“同一”时间调用'get',第二个在调用'set',会发生什么?
恕我直言,该集合必须像这样将锁设置为线程安全的:
private string sampleField;
private object threadSafer = new object();
public String SampleProperty{
get{ return this.sampleField; }
private set{
lock(threadSafer){
sampleField = value;
}
}
}
【问题讨论】:
-
“要求”是:所有使用(读取)该属性的线程必须具有相同/最新的值。但只有对象本身会修改值。关键字 'volatile' 是否应该保证这一点?
标签: c# multithreading