专栏名称: 代码随想录
认准代码随想录,学习算法不迷路。 刷题网站:programmercarl.com
目录
相关文章推荐
西藏发布  ·  02月22日《西藏新闻联播》:探寻手工艺品中 ... ·  5 小时前  
TGB湖南人  ·  DeepSeek带来的AI平权全面落地 ·  7 小时前  
网信西藏  ·  事关拉萨住房公积金! ·  昨天  
西藏发布  ·  今晚西藏油价下调! ·  3 天前  
51好读  ›  专栏  ›  代码随想录

谈谈你理解的进程同步与互斥?如何实现进程的同步与互斥?

代码随想录  · 公众号  ·  · 2025-01-20 11:30

正文

更多优质面试题以及学习笔记,尽在 卡码笔记 https://notes.kamacoder.com

今日优质笔记推荐: https://notes.kamacoder.com/questions/500055

进程之间的同步与互斥问题,究竟是怎么一回事?


unset unset 简要回答 unset unset

  • 同步和互斥的概念
  1. 同步 :进程同步是指多个进程按照 一定的顺序 执行,以确保数据的正确性和一致性;当多个进程共享资源或需要协作完成任务时,如果没有同步机制,可能会导致数据不一致或逻辑错误。
  2. 互斥 :进程互斥是指多个进程 不能同时访问共享资源 ,以确保资源的独占性;当多个进程需要访问共享资源(如文件、内存、设备)时,如果没有互斥机制,可能会导致数据竞争(Race Condition)。
  • 如何实现进程同步和互斥
    1. 软件实现方法
      ①单标志法 :通过一个标志位实现互斥,但不符合实际需求,违背了“ 空闲让进 ”准则。
      ②双标志先检查法 :进程在进入临界区 检查对方标志位,不能保证进程对临界资源的互斥使用,违背了“ 忙则等待 ”准则。
      ③双标志后检查法 :进程在进入临界区 检查对方标志位,可能导致两个进程均陷入无限等待,违背了“ 有限等待 ” 和 “ 空闲让进 ”准则。
      ④Peterson算法 :结合 单标志位 和 双标志后检查法,解决忙等待和死锁问题,但不满足“ 让权等待 ”准则,且 只能 处理 两个进程之间 的临界区问题。
    2. 硬件实现方法
      ①关中断方法 :在进入临界区前关中断,退出临界区后开中断。
      ②硬件指令方法 :TSL(Test and Set Lock):通过硬件指令实现原子操作。Swap:通过硬件指令交换两个变量的值。
    3. 高级同步机制
      ①信号量 :用于实现同步和互斥,支持P()和V()操作。
      ②管程 :将共享资源和操作封装在一起,提供了一种结构化的同步方式。
      ③屏障 :用于确保多个进程或线程在某个点之前不会继续执行。
      ④条件变量 :用于在多个进程或线程之间传递状态信息。

    unset unset 详细回答 unset unset

    • 同步和互斥的概念
    1. 同步 :同步关系,又称进程的 直接相互制约关系 (程序 --- 程序模式),是多个 协作 进程在工作中相互等待或通信的 协作关系
    2. 互斥 :互斥关系,又称进程的 间接相互制约关系 (程序 --- 资源 --- 程序模式),当一个进程进入临界区访问临界资源时,另一进程必须等待,当访问临界资源的进程退出临界区后另一个进程才被允许访问该临界资源,体现的是进程间的 竞争关系
  • 如何实现进程同步和互斥
    1. 软件实现方法
      ①单标志法 :设置一个共享的变量标志,比如整型变量turn,表示程序进入临界区的权限,可以取值为0或1,适用于两个进程,当turn取0时,P0进程进入临界区,并在退出时通过将turn置为1将进入临界区的权限转让给进程P1,进程P1的进入和退出同理。该方法的问题在于 强制要求进程轮流进入临界区 ,但这样不符合实际需求,违背了“ 空闲让进 ”准则。
      ②双标志先检查法 :与“单标志法”相比,将共享变量turn改为数组flag[2],进程在进入临界区 检查对方标志位——while (flag[1]); ,该方法不能保证进程对临界资源的互斥使用,两个进程可能同时进入临界区,违背了“ 忙则等待 ”准则。
      ③双标志后检查法 :先设置标志,再进行准入检测,进程在进入临界区 检查对方标志位,可能导致两个进程均陷入无限等待(两个进程均无法跳出while循环),违背了“ 有限等待 ” 和 “ 空闲让进 ”准则。
      ④Peterson算法 :结合 单标志位 和 双标志后检查法,既设置flag标志,用于表明进程是否希望进入临界区,又设置共享变量turn,用于规定进程进入临界区的顺序。Peterson算法满足互斥条件,空闲让进条件和有限等待条件,但不满足“ 让权等待 ”准则,且 只能 处理 两个进程之间 的临界区问题,不符合实际需求。
    2. 硬件实现方法
      ①关中断方法 :在进入临界区前关中断,暂停进程调度,让进程独占处理机,当进程退出临界区后开中断;关中断方法满足了“空闲让进”,“忙则等待” 和 “有限等待”;关中断方法不适用于多处理器环境。
      ②硬件指令方法 :TSL(Test and Set Lock):通过硬件指令实现原子操作。Swap:又称exchange指令,通过硬件指令交换两个变量的值。
    3. 高级同步机制
      ①信号量 :其基本原理是在几个进程之间使用简单的信号来实现同步;在操作系统中,信号量是一种关联一类临界资源的 数据结构 信号量的不同值表示一个临界资源的不同状态 ;信号量机制可以用于实现同步和互斥,支持P()和V()操作。
      ②管程 :管程是一个 软件模块 ,由一些公共变量及其描述和访问所有这些变量的函数组成。进程对共享资源的请求、释放和其他操作必须通过同一个管程来实现。当多个进程请求访问同一资源时,会根 据资源的情况接受或拒绝 ,确保每次只有一个进程进入临界区,有效实现进程互斥。
      ③屏障 :屏障是一种同步机制,用于确保多个进程或线程在某个点之前不会继续执行;当进程或线程 到达屏障时 ,它会 等待 ,直到所有进程或线程都到达屏障后才继续执行;屏障机制适合需要多个进程或线程同步执行的场景,如并行计算、多阶段任务。
      ④条件变量 条件变量是一种同步机制,用于在多个进程或线程之间传递状态信息; 进程或线程在条件不满足时等待,条件满足时被唤醒; 通常与互斥锁一起使用,以 避免竞争条件。


    unset unset 知识拓展 unset unset

    • 进程之间 同步与互斥 的实现,都应遵循以下 四条设计准则
    1. 空闲让进 :如果一个进程请求进入一个临界区,而此时没有其他进程在该临界区内,应立即允许该进程进入临界区,以便有效使用临界资源。






    请到「今天看啥」查看全文