T32 同步机制 让权等待 忙等待

  • Peterson 算法:忙等待
    • 通过一个 flag 数组和 turn 变量来实现两个进程的互斥。当一个进程尝试进入临界区但发现条件不满足时(即 flag[other] == trueturn == other),它会进入一个 while 循环:while (flag[other] && turn == other);。这个循环会持续地检查条件,而不主动放弃 CPU。
  • swap 指令:忙等待
    • 是由硬件提供的原子操作。它通常被用来实现自旋锁。如果锁已经被占用,当前进程会持续执行 swap 指令,不断地尝试获取锁,而不会放弃 CPU。
  • Test-and-Set 指令:忙等待
    • 也是一种硬件提供的原子操作,它读取一个内存位置的值,并将其设置为新值(例如 1),所有这些操作在一个原子步骤中完成。与swap一样,如果锁已经被占用,进程会持续尝试获取锁,而不会放弃 CPU。
  • 信号量让权等待
    • 调用 P 操作的进程会被操作系统阻塞,并放入等待队列。此时,该进程会主动放弃 CPU,让给其他进程执行。当另一个进程执行 V(signal)操作时,如果等待队列中有进程,操作系统会将其中的一个进程唤醒,使其进入就绪状态。