这个难题在NDC 2010上发布.有视频链接,但它们都被打破了.我不明白这个程序的行为; 为什么会挂?
class Woot
{
private static float PI;
private static bool initialized = doInitialize();
private static bool doInitialize()
{
if (!initialized)
{
var thread = new Thread(() => { PI = 3.14f; });
thread.Start();
thread.Join(); // here
}
return true;
}
public static void Main(string[] args)
{
Console.WriteLine(PI);
}
}
Run Code Online (Sandbox Code Playgroud)
这个程序的输出是什么?是吗:
- 3.14
- 0
- 引发异常
- 以上都不是
小智 29
我认为这个问题是由静电场初始化引起的.我发现新线程只在doInitialize完成后启动(尽管thread.Start()被调用) - 所以我认为CLR阻止其他线程以避免并发访问/双字段初始化.
总结一下:CLR不启动新创建的线程以避免并发访问,但主要的初始化线程等待子线程完成意味着死锁.
编辑
@Sebastian提出(在评论中)可能证明我的理论的链接:http://blogs.msdn.com/b/pfxteam/archive/2011/05/03/10159682.aspx
| 归档时间: |
|
| 查看次数: |
2882 次 |
| 最近记录: |