Net*_*ppy 3 c# multithreading properties synclock
我一直在阅读周围的内容,并得到了关于我是否应该在属性上使用同步锁的相互矛盾的答案。
我有一个多线程应用程序,需要跨线程获取/设置实例对象的属性。目前它是在不使用同步锁的情况下实现的,到目前为止我还没有注意到任何问题。我在常见的静态方法上使用同步锁,但我想以线程安全的方式正确实现我的实例类。
任何反馈将不胜感激。
一个好的经验法则是,如果满足以下任何条件,则需要锁定:
那么您可能需要锁定访问这些字段的每个方法或属性。
编辑:请记住,类内部的锁定很少是足够的——您需要做的是确保在整个逻辑操作范围内不会出错。
正如 @Bevan 指出的,如果调用代码需要多次访问一个对象,则客户端代码应该在其整个工作期间取出自己对该对象的锁定,以确保另一个线程不会“介入”它的访问并弄乱了它的逻辑。
您还需要注意,如果有任何事情需要一次取出多个锁,则它们始终以相同的顺序取出。如果线程 1 拥有实例 A 上的锁并尝试锁定实例 B,而线程 2 拥有实例 B 上的锁并尝试获取实例 A 上的锁,则两个线程都会被卡住而无法继续执行 - 就会出现死锁。
归档时间: |
|
查看次数: |
3432 次 |
最近记录: |