我读到,在自旋锁中,进程在循环中不断等待锁,直到它收到来自其他进程的信号(锁)或释放(锁)。这会导致忙等待,从而浪费 CPU 周期。
我的疑问是,如果CPU在循环中不断检查锁变量的值,那么其他进程如何完全执行临界区并释放锁,因为执行临界区也需要CPU,而CPU正忙于检查其他进程中锁的值?
答案1
即使一个进程在锁上旋转,任务调度程序仍然处于活动状态,并将调度其他任务。在单CPU系统上,旋转任务将被挂起,并由另一个任务代替它运行;在多 CPU 系统上,确切的行为将取决于正在运行的任务的数量。