欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)

发布时间:2025/4/5 windows 65 豆豆

文章目录

  • 进程的同步基本概念
    • 进程同步的主要任务
    • 进程间的制约关系
    • 临界资源
    • 临界区
    • 同步机制应遵循的规则
  • 信号量机制
    • 整型信号量
    • 记录型信号量 ❤❤❤
    • AND型信号量
  • 信号量的应用
    • 实现进程互斥
    • 实现前驱关系
    • 利用记录型信号量实现同步

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。点击这里

进程的同步基本概念

进程同步的主要任务

使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

进程间的制约关系

  • 由于资源共享造成的间接相互制约关系

  • 由于进程合作造成的直接相互制约关系

临界资源

一次仅允许一个进程访问的资源叫做临界资源互斥访问

临界区

进程中访问临界资源的代码
设计流程:

  • 检查临界资源是否可用
  • 访问
  • 将正在访问的标志恢复为未被访问的标志

同步机制应遵循的规则

  • 空闲让进
  • 忙则等待(临界资源占用需等待)
  • 有限等待(等待时间有限)
  • 让权等待(让出CPU)

信号量机制

整型信号量

P操作 wait(S)

wait(S):While (S<=0) do no-op;# 会一直占CPU运行,不能做到让权等待S--;

V操作 signal(S)

signal(S):S++;

注意:P操作和V操作属于原子操作,不可被中断

记录型信号量 ❤❤❤

typedef struct{int value;struct process_control_block *list }semphore;wait(semaphore *S){S->value--; // 代表可用资源数-1if (S->value<0)block(S->list); // 若减1后小于0,则证明资源缺乏,故阻塞进程 }signal(semphore *S){S->value++; // 代表可用资源数+1if(S->value<=0)wakeup(S->list); // 若加1后小于等于0,证明有阻塞的进程,故唤醒1}

AND型信号量

将进程需要的资源一次性分配,运行完后一次性释放

Swait(S1,S2,S3...) //同时满足所有信号量S Ssignal(S1,S2,S3...) //同时释放所有信号量S

信号量的应用

实现进程互斥

为进程设置初始信号量 mutex = 1 ,将临界区置于wait(mutex)和signal(mutex)之间

实现前驱关系

设置共享信号量 S = 0,实现先P1,后P2

S = 0 P1:语句1...signal(S) P2:wait(S)语句1...

利用记录型信号量实现同步

semaphore empty = 1; semaphore full = 0; begin parbeginp1:beginrepeat......wait(full)print(x) # 默认将x打印完后销毁signal(empty)......untilendp2:beginrepeat......wait(empty);x:=处理结果 # x重新创建赋值signal(full);until false;end ......

总结

以上是生活随笔为你收集整理的操作系统(三)| 进程同步详解(主要任务、制约关系、临界资源、临界区、同步机制遵循规则、信号量机制、信号量的应用)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。