我在实例构造函数中的一些代码锁定语句中找到了。代码看起来像这样
public class MyClass
{
private readonly object _syncRoot = new object();
public MyClass(string parameter)
{
lock (_syncRoot)
{
// some code
}
}
}
这里我觉得lock是没有用的,因为这段代码不能在不同的线程中调用。每个线程都会创建自己的对象实例调用构造函数。但也许我错了,不知道什么。谢谢。
编辑: 在这个问题的第一个答案C# Am i using lock correctly我找到了
It's best to put a lock around the code within the constructor, as I believe it's possible in certain circumstances that methods can be called before the constructor block has finished executing.
所以,这可能是一个答案。
最佳答案
你完全正确,lock
完全没用,因为它锁定在一个实例变量上,而任何外部调用者都无法访问它。
我想,如果 _syncRoot
被声明为 static
,这段代码会变得有用,在这种情况下,受锁保护的关键部分的语义将从 one-per -实例到每类一个。
编辑:(回应 Sinatr 的评论)上面对临界区内的代码做了一个假设,即它不进行使用 _syncRoot
的方法调用锁定对象。如果有这样的方法调用,它们的关键部分将被授予访问权限,因为线程已经持有监视器。
关于c# - 实例构造函数中的 lock(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42133578/