Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要锁定的最佳静态对象类型是什么?有比别人更好的吗?_C#_Multithreading_Concurrency_Locking - Fatal编程技术网

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