gpt4 book ai didi

c# - 线程同步被锁(this)混淆

转载 作者:行者123 更新时间:2023-12-02 19:42:44 28 4
gpt4 key购买 nike

我有一个类(class):

 public class LockTest
{
public void LockThis()
{
lock (this)
{
Console.WriteLine("lock this test");
System.Threading.Thread.Sleep(5000);
}
}

}

在主要部分:

 static void Main(string[] args)
{
LockTest lockTest = new LockTest();

lock (lockTest)
{
//lockTest.LockThis();
System.Threading.Thread thread = new Thread(lockTest.LockThis);
thread.Start();
}
Console.Read();
}

我认为调用lockTest.LockThis()会导致死锁,但事实并非如此。我不知道为什么。

最佳答案

这里的解释是时间。

Main 中启动线程的代码线程完全启动并达到它也尝试获取锁的点之前成功逃脱了锁.

尝试将 Console.Read 行移到 lock block 中,您就会明白我的意思。

另请注意,即使线程在 Main 方法逃脱锁定之前设法到达锁定代码,它也只会等待这种情况发生(等待主线程逃脱锁定) ),然后继续。

所以这里根本不存在死锁。

死锁是指两个线程相互等待或类似的情况。这段代码中没有这个内容。

关于c# - 线程同步被锁(this)混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18800295/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com