在多线程程序中执行一次初始化的代码段是否在“安全”之下?
我有点担心装箱/拆箱可能会导致一些问题...
private static object initialized = false;
public static void Initialize()
{
lock (initialized)
{
if ((bool)initialized == false)
{
DoInitialization();
initialized = true;
}
}
}
请注意,我不能仅仅从Main或其他一些单线程上下文中进行初始化。
最佳答案
您是对的-这是行不通的,因为您正在重新分配要锁定的对象。
您可以使用两个单独的成员来执行此操作-要锁定的对象仅分配一次,然后分配给您读取或分配给它的 bool 值(锁定后)。
您可能还需要考虑使用singleton在这里是否合适。