zoukankan      html  css  js  c++  java
  • 理解线程同步

    1、首先确定一点:同步安全,异步不安全。

    2、结合实例,针对下面的使用场景:妈妈做蛋糕给儿子吃。

    3、需求分析:

    (a)蛋糕的数量是共享数据,应该放入临界区。

    (b)妈妈做蛋糕的时候,儿子不能吃;儿子吃蛋糕的时候,妈妈不能做。

    (c)假设儿子很饿,妈妈做一个,儿子吃一个,妈妈做好一个后,等待儿子去吃,吃完后再去做,但是,如果儿子贪玩,很长时间都没吃完一个蛋糕,妈妈就不管了。继续做蛋糕。

    (d)有一点是肯定的:必须要蛋糕,儿子才能吃,也就是说,如果蛋糕没了,儿子必须等待妈妈做好蛋糕,并且必须一直等下去,知道妈妈做出蛋糕。

    (e)妈妈做好蛋糕后,通知儿子吃蛋糕;儿子吃完蛋糕后,通知妈妈继续做蛋糕。

    注意:为了避免当前线程一直等下去,也就是出现死锁,有两个办法:

    1、当前线程调用Monitor.Wait(sync,5000); 加上时间限制,等待超时,就不等了,进入就绪状态,准备执行。

    2、互斥的线程调用Monitor.Pulse(sync); 通知当前线程。

  • 相关阅读:
    软件开发模版与规范 & 项目组规范
    CSS代码结构初探
    DIV+CSS 一行两列布局
    AE 9.3代码 升级到AE10.0
    栅格相减 异常
    鹰眼视图异常
    十进制度批量转换度分秒
    javascript是一朵奇葩
    pku 1065 pku 1548
    hdu 1254 推箱子
  • 原文地址:https://www.cnblogs.com/nzbbody/p/2380809.html
Copyright © 2011-2022 走看看