我需要在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系统调用是原子过程,这意味着即使调度程序也不能中断它们。等待无法发生的情况将导致死锁。