C#网络编程学习

    --多线程编程技术

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

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

 

挂起:

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

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

 

睡眠:

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

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

 

阻塞:

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

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

 

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

posted on 2018-01-15 11:57  菠萝有点甜  阅读(297)  评论(0编辑  收藏  举报