如何在Minix 3中的系统调用中等待

问题描述 投票:0回答:2

我需要在minix内部实现系统调用,该调用要等到某个条件为真才返回。但是,我发现只是尝试类似

while (var != desired_value)
{
    // wait
}

无效,因为虽然它确实阻止了该进程,但它也阻止了所有其他以minix方式运行的进程。我什至不能切换到另一个虚拟终端并登录。我以为minix进程应该彼此独立运行,但是看起来当系统调用上的任何进程阻塞时,所有其他进程都同时挂起。这可以正确吗?谢谢

process system-calls minix
2个回答
0
投票

当然,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,因此您可以使用forkexec等来操纵进程。


0
投票

Minix系统调用是原子过程,这意味着即使调度程序也不能中断它们。等待无法发生的情况将导致死锁。

© www.soinside.com 2019 - 2024. All rights reserved.