C# 要锁定的最佳静态对象类型是什么?有比别人更好的吗?
可能重复:C# 要锁定的最佳静态对象类型是什么?有比别人更好的吗?,c#,multithreading,concurrency,locking,C#,Multithreading,Concurrency,Locking,可能重复: 我想知道什么是最好的私有静态对象来锁定,如果真的有区别的话 目前,我的大部分代码包括: private static object m_lockObject = new object(); lock(m_lockObject) { ..critical thread code here } 我应该使用不同的类型,而不是只锁定一个对象吗?例如自定义类实例、int或字符串等。。。?还是没关系 谢谢Lock语句只是底层对象的一种语法糖。为了锁定,它使用了一个引用。从显示器的角
我想知道什么是最好的私有静态对象来锁定,如果真的有区别的话 目前,我的大部分代码包括:
private static object m_lockObject = new object();
lock(m_lockObject)
{
..critical thread code here
}
我应该使用不同的类型,而不是只锁定一个对象吗?例如自定义类实例、int或字符串等。。。?还是没关系
谢谢
Lock
语句只是底层对象的一种语法糖。为了锁定,它使用了一个引用。从显示器的角度来看,它是什么参考并不重要!但是,锁定字符串
可能会导致意外结果,例如,由于字符串为。锁定值类型会因为装箱而导致异常
TL;DR版本-您做得非常正确(如果
静态
部分真的是您想要的行为)使用对象
很好,而且非常常见。如果您不小心,锁定字符串可能会由于字符串插入而导致意外结果。而锁定结构(例如int
)是不可能的(除非它被装箱,而且我不想走这条路,因为它会很乱,即使可能).我想我会回答你的问题。对象
是标准的。只是不要使用值类型(boxing-mess)或string
(interning-mess).@jordan.peoples这太接近了。从技术上讲,没有“最佳”类型。不同的情况需要不同的反应;这个问题表明什么时候使用what是合适的,什么时候不合适。如果你不认为这是一个确切的重复,那么这个问题只需要被关闭为“不具有建设性”,而这似乎对你帮助不大。静态是必需的。我希望在任何给定时间都不超过一个线程执行上述代码块。@jordan.peoples在此添加object
是用于此目的的理想类,因为它是满足lock