C# 锁匙的使用#
我正在使用以下代码进行C#编码练习:C# 锁匙的使用#,c#,multithreading,locking,C#,Multithreading,Locking,我正在使用以下代码进行C#编码练习: class Program { static object sync = new object(); static void SafeRun() { lock (sync) { Thread.Sleep(1000); } } static void Main(string[] args) { lock (sy
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");
}
}
}
将打印什么
lock
s实际上什么都不做-没有其他线程可以锁定(这就是为什么所有lock
都可以被删除)
你只是
- 开始
- 调用
SafeRun()
- 等一秒钟
- 打印出“安全”
死锁
,至少需要两个线程来访问它们之间锁定的资源
示例:
您有2个正在运行的线程
和2个列表
线程A
被锁定列表A
。线程A
希望从列表B
线程B
被锁定列表B
。线程B
希望从列表A中获取值
现在,两个线程将尝试获取它们之间锁定的资源。关键字lock
用于限制其他线程访问某个资源。由于您的应用程序没有使用多个线程,因此不可能发生死锁。此程序中只运行一个线程,即主线程,同步资源被同一线程访问了两次,因此不会出现死锁情况。运行该程序并查看它将打印什么:这是您的作业,不是吗?顺便说一句,它将打印“安全”
static void Main(string[] args)
{
lock (sync) // does nothing (no other treads to lock)
{
SafeRun(); // execution
}
Console.Write("Safe"); // printing out
}
static void SafeRun()
{
lock (sync) // does nothing (no other treads to lock)
{
Thread.Sleep(1000); // 1 second pause
}
}