操作系统——18.进程互斥的软件实现方法

这篇文章我们来讲一下进程互斥的软件实现方法

目录

1.概述

2.单标志法

3.双标志检查法

4.双标志后检查法

5.Perterson算法

6.小结 


1.概述

首先,我们来看一下这节的大体框架

学习提示:

  1. 理解各个算法的思想、原理
  2. 结合上小节学习的“实现互斥的四个逻辑部分”,重点理解各算法在进入区、退出区都做了什么
  3. 分析各算法存在的缺陷(结合“实现互斥要遵循的四个原则”进行分析)

2.单标志法

算法思想:两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予

下面用代码进行分析一下:

 

3.双标志检查法

 下面看一下代码:

4.双标志后检查法

算法思想:双标志先检查法的改版。前一个算法的问题是先“检查”后“上锁”,但是这两个操作又无法一气呵成,因此导致了两个进程同时进入临界区的问题。因此,人们又想到先“上锁”后“检查”的方法,来避免上述问题。

下面来看一下代码: 

5.Perterson算法

下面看一下代码:

 其中1,2,3三行代码是进入区代码

进入区:

  1. 主动争取
  2. 主动谦让
  3. 检查对方是否也想使用,且最后一次是不是自己说了“客气话”

Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则。

Peterson算法相较于之前三种软件解决方案来说,是最好的,但依然不够好。

6.小结 

 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
计算机操作系统中的互斥机制是一种用于控制多个进程或线程对共享资源的访问的方法。它确保在任何给定时间只有一个进程或线程可以访问共享资源,以避免数据竞争和不一致性。 互斥机制的实现可以通过硬件提供的原子操作指令,比如测试和置位(Test-and-Set)指令、交换指令(exchange),或者通过软件实现锁机制。 在使用互斥机制时,进程或线程需要先获取互斥锁,然后执行对共享资源的操作,最后释放互斥锁,以便其他进程或线程可以获取锁并访问共享资源。 以下是一个使用Python中的线程模块实现互斥机制的示例: ```python import threading # 定义一个共享资源 shared_resource = 0 # 创建一个互斥锁 mutex = threading.Lock() # 定义一个线程函数 def thread_function(): global shared_resource # 获取互斥锁 mutex.acquire() try: # 对共享资源进行操作 shared_resource += 1 finally: # 释放互斥锁 mutex.release() # 创建多个线程并启动 threads = [] for _ in range(10): t = threading.Thread(target=thread_function) threads.append(t) t.start() # 等待所有线程执行完毕 for t in threads: t.join() # 输出最终的共享资源值 print("Shared resource value:", shared_resource) ``` 在上述示例中,我们使用了`threading.Lock()`创建了一个互斥锁对象`mutex`,然后在线程函数中使用`mutex.acquire()`获取互斥锁,执行对共享资源的操作,最后使用`mutex.release()`释放互斥锁。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

L纸鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值