为何《操作系统概念》第9版中基于test_and_set的有界等待互斥算法采用无限do-while循环?
关于基于test_and_set的有界等待互斥算法中do-while(true)循环的疑问
我在学习Avi Silberschatz、Peter Baer Galvin、Greg Gagne所著的《操作系统概念》第9版的进程同步章节时,看到了一段基于test_and_set的「有界等待互斥」算法,具体代码如下:
do { waiting[i] = true; while (waiting[i] && test_and_set(&lock)) ; waiting[i] = false; /* 临界区 */ j = (i + 1) % n; while ((j != i) && !waiting[j]) j = (j + 1) % n; if (j == i) lock = false; else waiting[j] = false; /* 剩余区 */ } while (true);我已经理解了该算法的逻辑,但不清楚为何要使用无限的
do-while(true)循环?
这其实是进程同步算法里的标准设计思路,原因主要有两点:
贴合进程的持续运行特性
在操作系统中,绝大多数进程都是持续执行、反复需要访问共享资源的——比如循环处理请求的服务器进程、不断读取输入的交互进程。do-while(true)的无限循环,正好模拟了进程这种「永不终止、重复执行核心工作流程」的行为。保证互斥框架的完整性
这段代码是一个完整的互斥控制框架,它需要覆盖「尝试获取锁→进入临界区→执行临界区操作→释放锁/唤醒下一个进程→执行剩余区代码→再次尝试获取锁」的全流程。无限循环让这个同步流程可以反复运行,满足进程在生命周期内多次访问临界区的需求。
简单来说,这个无限循环就是为了让进程能不断重复它的核心工作:每次完成一轮临界区和剩余区的操作后,立刻回到起点,重新尝试进入临界区,完美匹配实际进程的运行模式。
内容的提问来源于stack exchange,提问作者Nikhil Mishra
相关产品推荐
相关产品推荐

