我需要在 minix 中实现一个系统调用,等待某个条件为真后再返回。但是,我发现只是尝试类似
while (var != desired_value)
{
// wait
}
不起作用,因为虽然它确实阻塞了进程,但它也阻塞了在 minix 中运行的所有其他进程。我什至无法切换到另一个虚拟终端并登录。我认为 minix 进程应该彼此独立运行,但看起来当任何进程阻塞系统调用时,所有其他进程同时被挂起。这可能是正确的吗?谢谢
我需要在 minix 中实现一个系统调用,等待某个条件为真后再返回。但是,我发现只是尝试类似
while (var != desired_value)
{
// wait
}
不起作用,因为虽然它确实阻塞了进程,但它也阻塞了在 minix 中运行的所有其他进程。我什至无法切换到另一个虚拟终端并登录。我认为 minix 进程应该彼此独立运行,但看起来当任何进程阻塞系统调用时,所有其他进程同时被挂起。这可能是正确的吗?谢谢
当然 Minix 有一个非阻塞等待机制:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status)
pid_t waitpid(pid_t pid, int *status, int options)
wait
导致其调用者延迟,直到收到信号或其子进程之一终止。
waitpid
为收集子进程状态时不得阻塞的程序或希望等待一个特定子进程的程序提供备用接口。
Minix 提供 POSIX,因此您可以使用fork
,exec
等来操作进程。
Minix 系统调用是原子过程,这意味着它们不能被中断,即使是调度程序。等待不可能发生的条件会导致死锁。