2011-05-02 58 views
3

在C#中,获取非易失性属性时是否需要锁定?我知道在设置属性时我们需要锁定。如何获得?当我们获取C#中的属性时,我们是否需要锁定?#

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

+0

可能重复[是C#自动实现静态属性是线程安全的?](http://stackoverflow.com/questions/2074670/are-c-auto-implemented- static-properties-thread-safe) – 2011-05-02 12:18:25

回答

4

不,automatic properties不是线程安全的。它们不过是句法糖;编译器会自动生成专用的后备字段,就像你手动写出它们一样。

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

+0

我认为自动属性总是线程安全的,因为它只是返回语句。 (如果属性类型是一个结构,我不太确定...)。不过,我认为,你必须小心,因为你从属性返回的内容绝不会以任何方式抵御并发。 – 2011-05-02 12:07:50

+0

@Mario:自动属性不是“只有返回语句”。他们还包括一个二传手,由于显而易见的原因,它不是线程安全的。但即使是吸气剂也不一定是线程安全的。 – 2011-05-02 12:10:03

+0

好的,取决于数据类型,所有可以被原子操纵的东西都是线程安全的(所以现在只有像双打或浮动的怪物才会出现在我的脑海里) - 我还没有决定使用struct ... – 2011-05-02 12:11:33

2

不可以。如果您从多个线程访问属性,则仍需锁定。

4

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

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

1

我想说,这取决于属性的类型。如果它可以以原子方式读取(如int或指针),则读取是安全的。

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

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

心连心

马里奥

相关问题