gpt4 book ai didi

java - 4 个进程的信号量执行

转载 作者:行者123 更新时间:2023-11-30 21:08:00 24 4
gpt4 key购买 nike

谁能帮我解释一下吗?

在以下代码中,四个进程使用 printf 生成输出并使用三个信号量进行同步R , ST 。我们假设printf不会引起上下文切换。

/* initialization */
Semaphore R=1, S = 3, T = 0;

/* process 1 */
while(true) {
P(S);
printf('A');
}

/* process 2 */
while(true) {
P(T);
printf('B');
printf('C');
V(T);
}

/* process 3 */
while(true) {
P(T);
printf('D');
V(R);
}

/*process 4 */
while(true) {
P(R);
printf('E');
V(T);
}

这组进程运行时打印了多少个A和B?

最佳答案

进程 1 与其他进程无关,因为它只是获取 S,并且不释放任何内容。它将打印 'A' 3 次,并永远 hibernate 。

进程 2 和 3 将在启动时立即 sleep ,因为启动时无法获取 T 源。进程 4 将获取最后一个 R 并释放 T。此释放将唤醒进程 2 或 3。在下一个循环中,进程 4 将 hibernate ,因为没有剩余 R。

到目前为止,我们有:R=0,S = 0,T = 1

假设 T 释放唤醒了进程 2,那么它将获取 T,打印“BC”,然后释放回 T。此释放将唤醒正在 sleep 的进程 3。在下一个循环中,进程 2 将 hibernate ,因为进程3 获得了 T。

进程 3 将使用 T,将打印“D”,并将释放 R。此版本的 R 将使第 2、第 3 和第 4 进程进入无限循环。因为R和T永远不会同时完全获得。

我们无法知道将打印多少个 B,但我们可以说“A”将被打印 3 次。

关于java - 4 个进程的信号量执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40670252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com