zoukankan      html  css  js  c++  java
  • 多线程程序的临界区

    所谓的临界区:是指进程中的一段需要访问共享资源并且当另一个进程处于相应代码区域时便不会被执行的代码区域
    对于临界区的管理的必须要满足一下的四个要求:
    互斥:同一时间临界区中最多存在一个线程
    Progress:如是一个线程想要进入临界区,那么它最终会成功
    有限等待:如果一个线程i处于入口区,那么在i的请求被接受之前,其他线程进入临界区的时间是有限制的。
    无忙等待(可选):如果一个进程在等待进入临界区,那么在它可以进入之前会被挂起。

    解决方案
    ①:禁用硬件中断
    缺点:一旦中断被禁用,线程就无法被停止,整个系统都会为你停下来。可能导致其他线程处于饥饿状态。
    ②:基于软件的解决方法
    ③:更高级的抽象

    案例分析:假设有甲乙两个人共用一个冰箱里的面包,如果那个人发现冰箱里没有面包后就去购买面包。如果保证冰箱里的面包不会多也不会少。

    代码

    image

    问题:如何保证以上面包只能是某一个人购买。

    解决方案一:加入lock操作原语

    image

  • 相关阅读:
    [CF786B] Legacy
    [CF833B] The Bakery
    [JSOI2008] 最小生成树计数
    [SDOI2010] 外星千足虫
    [POJ1830] 开关问题
    [Luogu1365] WJMZBMR打osu! / Easy
    [Noip2016] 换教室
    [NOI2002] 荒岛野人
    [计蒜之道复赛 2018] 贝壳找房计数比赛
    [SDOI2014] 旅行
  • 原文地址:https://www.cnblogs.com/lihuali/p/11332043.html
Copyright © 2011-2022 走看看