我们在C#中获取属性时是否需要锁定?

时间:2011-05-02 11:58:34

标签: c# .net properties thread-safety automatic-properties

在C#中,获取非易失性属性时是否需要锁定?我知道在设置属性时我们需要锁定。怎么样?

现在3.0提供自动属性,它本身是线程安全吗?

4 个答案:

答案 0 :(得分:4)

是。如果多个线程正在读/写同一属性,则必须将其锁定。

自动属性只不过是语法糖而且不会锁定。

答案 1 :(得分:4)

不,automatic properties不是线程安全的。它们只不过是语法糖;编译器自动生成私有支持字段,就像你手动写出来一样。

但是,除非您的应用程序从多个线程访问属性,否则首先没有理由担心这一点。如果您的应用程序是多线程的,那么很难从您的问题中判断出来。

答案 2 :(得分:2)

没有。如果您从多个线程访问该属性,则仍需要锁定。

答案 3 :(得分:1)

我会说这取决于财产的类型。如果它可以原子方式读取(比如int或指针),那么读取是安全的。

但是,如果通过属性访问对象,则多个线程可以同时访问该对象。

但是getter / setter中的锁定也不会在这里帮助。

HTH

马里奥