版权声明:QQ: 1063385677 Copyright ©2019 CielleeX 本文地址: https://blog.csdn.net/Ciellee/article/details/89714206
进程/线程 合作
优点: 共享资源、加速、模块化(易于扩展)
原子操作(Atomic Operation): 指一次不存在任何中断或失败的执行
临界区(Critical section)
互 区(Critical section)
方法一: 禁用硬件中断
没有中断,没有上下文切换,因此没有切换
一旦中断被禁用,线程就无法被停止,只要线程不释放,其他线程就无法获得CPU。
方法二: 基于软件的解决方法
(1): Dekker算法:第一个针对双线程的正确解决算法
Eisenberg and McGuire’s Algorithm
(2): Bakery 算法:针对N进程的临界区问题,类似银行,进入临界区前,进程接收一个数字,PID比较小的进入临界区
(3):忙等待: 浪费CPU时间
(4):Peterson算法: 没有硬件保证的情况下无真正的软件解决方案
方法三: 更高级的抽象
使用锁: 互斥、禁用中断(单处理器、软件方法(复杂)、原子操作指令)
可以选择有忙等和无忙等
临界区(Critical section)
互斥(Mutual exclusion)
死锁(Dead lock)
信号量
V: Verhoog 荷兰语 增加
P: Prolaag 荷兰语 尝试减少
经典问题一 ------------- 读者写者问题:
读者优先实现:
使用管程来实现 读者写者问题:
写者优先实现:
read实现
Write 实现:
经典问题二 ------------- 哲学家就餐问题