【发布时间】:2016-11-05 19:13:52
【问题描述】:
我正在使用此代码进行 C# 编码练习:
class Program
{
static object sync = new object();
static void SafeRun()
{
lock (sync)
{
Thread.Sleep(1000);
}
}
static void Main(string[] args)
{
lock (sync)
{
SafeRun();
}
Console.Write("Safe");
}
}
}
将打印什么?
- 没有,发生了死锁。
- 无法编译。
- 将打印“安全”。
我以为会发生死锁,但是当我运行代码时会打印“安全”。
那么,你能解释一下为什么 3 是正确的,为什么 1 是不正确的?
谢谢!
【问题讨论】:
-
这个程序只有一个线程,主线程,同步资源被访问了两次,但是是同一个线程,所以不会出现死锁的情况。
-
运行程序,看看它会打印什么:这是你的作业,不是吗?顺便说一句,它将打印“安全”
标签: c# multithreading locking