每个进程 在退出区 都会表示 谦让 的动作 下一次让对方使用
如果对方一直不使用这个资源的话,那么当它想要再次使用这个资源的时候
发现此时并没有轮到自己
虽然这个临界资源 此时是空闲的
然而上一次是自己表示了谦让的动作
所以此时自己还不能访问临界资源
即违反了 空闲让进 原则
每个进程在进入区 做了两件事情
第一个事情 检查对方是否想要进入临界区
第二个事情 如果对方不想进入临界区 表达自己想要进入临界区的意愿
(flag 设为 true)
进程 并发执行 发生进程切换 ,两个进程可能同时进入 临界区
即违反了 忙则等待 原则
并发可能会导致 两个进程都无法进入临界区 无限等待临界区
双标志法 每个进程会主动表示 自己想要进入临界区的意愿
单标志法 turn变量 每个进程都会谦让着,让对方使用临界区
尽管各个进程是并发运行的, 但对turn的值 设置有先后顺序
谁最后说了 ”客气话“(谁最后设置了turn的值)
谁就做出了谦让的动作(谁就失去了行动优先权)
让对方先进入临界区
没有满足 让权等待(失去CPu)
假设进程 进不了 临界区 ,会一直卡在while循环这,其实还一直在CPU上执行,不断地检查while循环条件是否满足
(进程虽然进不了临界区 但是一直占据CPU资源)
抓住 谦让 和 表达意愿 这两个核心思想
另外 双标志先检查法 思路很好
但是导致这个算法问题 的关键在于
“检查” 和 “上锁” 动作 不能一气呵成
网友评论