Answers:
操作系统为此类进程间通信提供了某些不需要轮询的原语。
如果进程A在互斥锁M上等待,则操作系统会知道A无法运行,并将其放在一堆进程中等待发生的事情。持有M的进程释放后,操作系统会查看等待它的进程列表。列表中的第一个进程(也许是A)将从空闲存储桶中删除,并放入运行队列中。下次A获得时间片时,它调用的wait()将返回,程序继续。
_exit(2)
在POSIX-y系统上调用),也可以自愿终止(例如,诸如被零除之类的错误会产生中断或其他调用kill(2)
)。无论哪种情况,控制都明确地交还给OS,后者知道正在运行或将终止什么进程。结束进程的工作包括释放其资源,包括互斥量。如果某个互斥锁已被已死的进程占用,则操作系统将释放它。如果该进程在互斥体的等待列表中,它将被删除。