cxfans
8/17/2019 - 6:49 AM

实现临界区互斥——单标志法理解 #操作系统

实现临界区互斥——单标志法理解 #操作系统

#include <stdio.h>
// 实现临界区互斥——单标志法理解
// 代码如下:

int main() {
    // 表示当前允许进入临界区的进程号,此处即进程下标
    int turn = 0;

    // P0 进程
    while (turn != 0);  // 进入区
    // critical section;  // 临界区
    turn = 1;  // 退出区
    printf("%d\n", turn);
    // remainder section;  // 剩余区

    // P1 进程
    while (turn != 1);  // 循环(1)
    // critical section;
    turn = 0;
    printf("%d\n", turn);
    // remainder section;
}

// 假设turn初始值为0,即刚开始只允许0号进程进入临界区。
// 若P1进程先与P0上处理机运行,则会一直卡在循环(1)。
// 直到P1的时间片用完,发生调度,切换P0上处理机运行,
// P0可以正常访问临界区,退出并设置turn为1后,P1在下一次
// 上处理机时才可以访问临界区。