1
5
最大的区别是有了第二个对象 只有你的代码知道 不会有意外后果的风险(死锁、脉冲/等待故障等) 其他 代码(不是您的)锁定主对象(这通常对其他代码可用)。
IMO,也许CLR团队会做得更好
|
2
1
marc涵盖了最重要的一点,但我更喜欢第一种模式,因为它还为读写锁或任何其他粒度级别(可能对您的特定用途有用)提供了单独对象的范围。 |
3
0
从根本上说,没有区别。如果所有线程不安全操作都锁定在同一对象上,则没有区别。然而,从实现的角度来看,可能存在差异。如果其他线程需要访问需要独占锁的对象,则必须确保该同步对象可用,并明确需要锁定哪个对象。 另一方面,在某些情况下,您可能会将值实际分配给锁定块中的其他值。在这种情况下,显然需要锁定不相关的对象。 这可以归结为个人偏好和可维护性(是否需要锁定第二个对象,这是一个坏主意,还是两者都不需要?) |
4
0
使用不同的对象来锁定允许更多的同步粒度和性能。如果锁定同一对象,则一个操作可能会不必要地阻塞另一个操作。如果使用lock(this),则所有并发操作都必须等到拥有锁的操作释放它。但是,这可能不是必需的,因为某些操作可能无法访问相同的资源。所以你不必要地把它们锁起来,从而影响了表演。相反,对不同的共享资源组使用不同的同步对象,并让您的操作对它们需要访问的资源使用相应的锁。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |