C# 避免死锁,使用Monitor.TryEnter方法设定超时时间

时间:2021-06-18 19:12:07   收藏:0   阅读:38

1.在多任务系统下,当一个或多个进程等待系统资源,而资源又被进程本身或其它进程占用时,就形成了死锁。总的来说,就是两个线程,都需要获取对方锁占有的锁,才能够接着往下执行,但是这两个线程互不相让,你等我先释放,我也等你先释放,但谁都不肯先放,就一直在这僵持住了。

2.死锁演示:

 1         static void Main(string[] args)
 2         {
 3             Task.Run(()=> Method1());
 4             Task.Run(() => Method2());
 5             Console.Read();
 6         }
 7         static void Method1()
 8         {
 9             lock (obj1)
10             {
11                 Console.WriteLine("开始执行方法一");
12                 Thread.Sleep(1000);
13                 lock (obj2)
14                 {
15                     Console.WriteLine("方法一执行完毕");
16                 }
17             }
18         }
19         static void Method2()
20         {
21             lock (obj2)
22             {
23                 Console.WriteLine("开始执行方法二");
24                 Thread.Sleep(1000);
25                 lock (obj1)
26                 {
27                     Console.WriteLine("方法二执行完毕");
28                 }
29             }
30         }

结果如下,这两个方法永远都不会执行完毕。

技术分享图片

 

 

3.那么,死锁应该怎么样解决呢?

原文:https://www.cnblogs.com/yunchen/p/14900265.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!