构造函数是否可以在 C# 中被抢占?
例如,考虑以下代码:
public class A
{
public bool ready = true;
public A()
{
ready = false; // Point #1
// Other initialization stuff
ready = true; // Point #2
}
}
在代码的其他地方,两个线程可以访问 A 类型的变量,第一个线程调用构造函数,该构造函数在点 #1 被抢占。然后第二个线程测试ready
并发现它仍然是真的,因此它做了一些坏事。
这种情况可能吗?
进一步来说:
- 构造函数可以被抢占吗?
- 如果是这样,这是否意味着
lock
构造函数中应该有同步代码? - 构造函数退出后,正在构造的对象是否只分配给共享变量,从而完全避免了这个问题?