首页 文章

C#锁定对象是否需要延迟初始化

提问于
浏览
1

我可能在某处遗漏了一些令人眼花缭乱的明显文档,但是静态只读成员变量保证可以正确初始化以用作锁定对象吗?

简而言之,我有一个库类,它在外部资源上执行操作,任何时候都应该只有一个实例触摸它(不必担心另一个进程,它只在一个进程上) . 库类本身可以在多个线程中有多个实例,因此为了确保一次只有一个实例访问所述资源,我需要使用一个锁 .

我见过很多像这样的锁对象声明 .

private static readonly object _lockObj = new object();

这可以保证多个线程不会在错误的时间内同时初始化两个对象并锁定两个对象吗?或者我应该像这样创建锁对象 .

private static readonly Lazy<object> _lockObj = new Lazy<object>(() => new object());

附:我'm referring to the C#' s lock(_lockObj){...} 用于锁定的关键字 .

1 回答

  • 2

    运行时仅保证静态成员字段的一个副本 . 你甚至可以在没有任何类实例的情况下使用它 . 用作锁定对象是安全的 .

相关问题