C#中的字符串是不可变的并且是线程安全的。但是当你有一个公共的getter属性时呢?就像这样:字符串属性本身是否是线程安全的?
public String SampleProperty{
get;
private set;
}
如果我们有两个线程,第一个是叫“弄”,并在“相同”的时间,二是呼吁“设置”,会发生什么?
恕我直言集必须做出一个锁是线程安全的是这样的:保证是原子,所以有
private string sampleField;
private object threadSafer = new object();
public String SampleProperty{
get{ return this.sampleField; }
private set{
lock(threadSafer){
sampleField = value;
}
}
}
“要求”是:所有使用(读取)属性的线程必须具有相同/最新的值。但只有对象本身修改了这个值。 关键字'挥发性'应该保证这一点,或不? – TomTom 2009-01-12 10:37:53