• Suspend()和Resume()


    Suspend()和Resume()

    一、简介

    其实在C# 2.0以后, Suspent()和Resume()方法已经过时了。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend()。

    二、代码

    class Program
        {
            static void Main(string[] args)
            {
                Thread threadA = new Thread(ThreadMethod);  
                threadA.Name = "A線程";
                threadA.Start();
                Thread.Sleep(3000);         //休眠3000毫秒      
                Console.WriteLine("我現在開始恢復掛起!");
                threadA.Resume();           //继续执行已经挂起的线程
                Console.ReadKey();
            }
            public static void ThreadMethod(object parameter)
            {
                Console.WriteLine("我是:{0},我現在開始掛起!", Thread.CurrentThread.Name);
                Thread.CurrentThread.Suspend();  //挂起当前线程
                for (int i = 1; i <= 10; i++)
                {
                    Console.WriteLine("我是:{0},我循環{1}次", Thread.CurrentThread.Name, i);
                }
            }
    
        }

    三、运行结果

    执行上面的代码。窗口并没有马上执行 ThreadMethod方法输出循环数字,而是等待了三秒钟之后才输出,因为线程开始执行的时候执行了Suspend()方法挂起。然后主线程休眠了3秒钟以后又通过Resume()方法恢复了线程threadA。


    技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
    我创建了一个.NET开发交流群,用于分享学习心得和讨论相关技术难题。欢迎有兴趣的小伙伴扫码入群,相互学习!

  • 相关阅读:
    redis 初探
    RAID,mdadm(笔记)
    EXT2文件系统
    压缩、解压缩命令(笔记)
    shell编程while
    软连接、硬链接、磁盘分区管理(笔记)
    磁盘管理(笔记)
    恢复Linux下被误删除的文件(笔记)
    Linux下高效数据恢复软件extundelete应用实战
    RedHat安装GCC问题-解决依赖问题
  • 原文地址:https://www.cnblogs.com/wml-it/p/14821533.html
Copyright © 2020-2023  润新知