回答
不,automatic properties不是线程安全的。它们不过是句法糖;编译器会自动生成专用的后备字段,就像你手动写出它们一样。
但是,除非您的应用程序正在从多个线程访问属性,否则没有理由首先担心这一点。从您的问题中很难判断您的应用程序是否是多线程的。
我认为自动属性总是线程安全的,因为它只是返回语句。 (如果属性类型是一个结构,我不太确定...)。不过,我认为,你必须小心,因为你从属性返回的内容绝不会以任何方式抵御并发。 – 2011-05-02 12:07:50
@Mario:自动属性不是“只有返回语句”。他们还包括一个二传手,由于显而易见的原因,它不是线程安全的。但即使是吸气剂也不一定是线程安全的。 – 2011-05-02 12:10:03
好的,取决于数据类型,所有可以被原子操纵的东西都是线程安全的(所以现在只有像双打或浮动的怪物才会出现在我的脑海里) - 我还没有决定使用struct ... – 2011-05-02 12:11:33
不可以。如果您从多个线程访问属性,则仍需锁定。
是的。如果多个线程正在读取/写入同一个属性,则必须将其锁定。
自动属性只不过是语法糖而不锁定。
我想说,这取决于属性的类型。如果它可以以原子方式读取(如int或指针),则读取是安全的。
但是,如果您通过属性访问对象,则多个线程可以同时访问该对象。
但是getter/setter中的锁也不会在这里帮助。
心连心
马里奥
的- 1. 当我们使用xchg时,我们是否需要防护
- 2. 当我们创建表时,我们是否需要指定关系的基数?
- 3. 我们是否需要ezpublish_legacy?
- 4. 我们是否需要取消按钮?
- 5. 我们是否需要枚举的可序列化属性
- 6. 当我们计算Gflop时,我们是否需要考虑指数计算?
- 7. 读取属性文件时,我们是否需要检查编码方案?
- 8. 使用obj-c中的属性,我们是否需要声明实例变量?
- 9. 我们是否也需要允许ruby虚拟属性?
- 10. 更改属性文件后我们是否需要部署war
- 11. 为什么我们需要在C#中锁定和对象?
- 12. 当我们需要接口C#
- 13. 当我们有点子时,为什么我们需要Anaconda?
- 14. 如果我们需要支持多个平台,我们是否需要restclient
- 15. 我们是否需要解决ConcurrentModificationException?
- 16. 我们是否需要更新Orbeon?
- 17. 我们是否需要更改标题?
- 18. 我们是否需要关闭file_get_contents?
- 19. 我们是否需要在UIScrollView iOS 6+
- 20. 我们是否需要分区器?
- 21. 当我们需要使用捆绑:锁定和解锁上Rails3中
- 22. 如果我们正在同步读取,我们是否需要同步写入?
- 23. 当我们不需要我们的表的主键?
- 24. 为什么我们需要在C#属性
- 25. 我们是否需要在TCL中“取消”变量?
- 26. 我们是否需要在JavaScript中“取消”变量?
- 27. 为什么我们需要analysis_export当我们有analysis_port
- 28. 在httpclient 4.x.x中,当我们将PoolingClientConnectionManager配置为httpclient时,我们是否需要手动释放连接?
- 29. 为什么我们有类时需要id属性?
- 30. 在Android中,当我们获取地理数据时,我们是否需要在SIM中获取互联网服务?
可能重复[是C#自动实现静态属性是线程安全的?](http://stackoverflow.com/questions/2074670/are-c-auto-implemented- static-properties-thread-safe) – 2011-05-02 12:18:25