在多线程程序中执行一次初始化的代码段是否在“安全”之下?

我有点担心装箱/拆箱可能会导致一些问题...

private static object initialized = false;

public static void Initialize()
{
  lock (initialized)
  {
    if ((bool)initialized == false)
    {
      DoInitialization();
      initialized = true;
    }
  }
}

请注意,我不能仅仅从Main或其他一些单线程上下文中进行初始化。

最佳答案

您是对的-这是行不通的,因为您正在重新分配要锁定的对象。

您可以使用两个单独的成员来执行此操作-要锁定的对象仅分配一次,然后分配给您读取或分配给它的 bool 值(锁定后)。

您可能还需要考虑使用singleton在这里是否合适。

10-04 21:37