C#网络编程学习--多线程编程技术 对于 挂起 、 睡眠 与 阻塞 的理解

本文通过生动的例子解释了C#中的挂起、睡眠与阻塞三种线程状态。挂起是指线程被暂停,等待特定条件恢复;睡眠是线程主动暂停一段时间后自行恢复;阻塞则是由于资源竞争导致的被动暂停。

C#网络编程学习

    --多线程编程技术

对于 挂起 、 睡眠 与 阻塞 的理解

  我用三个既生动形象,又贴近生活的例子来表达我对于这三个概念的理解:

 

挂起:

  “写作业写累了,需要休息一会儿,便上床睡觉,但并没有定闹钟,直到老妈把我叫醒,我才起床,继续写作业”

  其中“写作业”就是指我们线程中的程序执行,“没有定闹钟的睡觉”在C#中使用Suspend()函数来将线程暂时暂停,“被老妈叫醒”在C#中使用Resume()函数来唤醒线程,让线程接着执行程序。

 

睡眠:

  “写作业写累了,需要休息一会儿,便上床睡觉,定了个闹钟,被闹钟叫醒之后,起床继续写作业”

  其中“定了闹钟的休息”在C#中使用Sleep(x)函数来将线程暂停 x ms ,当定时的时间到了之后,再继续执行线程里的程序。

 

阻塞:

  “本想去写作业,无奈发现桌子被弟弟给占用了,只能等弟弟用完之后再写作业”

  其中“桌子”指的是一些共用的系统资源或者是被上锁的一段共用代码,“弟弟”指的是另外一个线程,有些资源和代码同时只能供一个线程使用,当一个线程正在使用的时候,另外一个代码就不能使用,只能等待之前的线程使用完毕才能使用,这就造成了一种被动的“挂起”,而唤醒方式就是之前的线程释放资源或释放代码。

 

遇到一些比较容易混淆的问题时,我们要多看看别人的理解,然后再思考一下如何将自己的思想和别人的思想融合,从而产生一个更好的思想。

转载于:https://www.cnblogs.com/fengshen19951029/articles/8287501.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值