【发布时间】:2010-11-25 09:07:33
【问题描述】:
我一直在阅读,关于是否应该在属性上使用同步锁得到了相互矛盾的答案。
我有一个多线程应用程序,它需要跨线程获取/设置实例对象的属性。它目前是在没有使用同步锁的情况下实现的,到目前为止我还没有注意到任何问题。我在常用静态方法上使用同步锁,但我想以线程安全的方式正确实现我的实例类。
任何反馈都将不胜感激。
【问题讨论】:
-
如果您使用的方法是
SetX()而不是X属性设置器,您是否需要锁定(“SyncLock”)?没有完整的上下文,很难说。此外,如果不了解更大的上下文,就无法辨别单个锁是否解决/解决了真正的问题。 “线程很容易。并发很难。” -
@pst 我已经阅读了一些关于用方法替换属性的内容,但似乎也无法得到明确的答案。据我了解,属性本质上是一种简单的方法。由于我已经使用属性/字段设计实现了应用程序,因此我想尝试保持这种方式。我想这个问题更多的是关于良好的设计实践和线程安全。感谢您的链接,我以为我已经进行了彻底的搜索,但从未见过!
-
用方法替换属性的真正意义在于“告诉,不要问”。如果您需要对类中的数据进行处理,请将代码作为方法移入类中,而不是将其放入表单或模块中并让它使用属性来获取数据。请参阅c2.com/cgi/wiki?TellDontAsk 进行讨论。
-
@Jeffery hmmm... 这是一篇有趣的文章。我的应用程序依赖于状态行为,因此在鸽子中扔了一只猫。
标签: c# multithreading properties synclock