gpt4 book ai didi

signals - 信号量 : Can you signal before wait?

转载 作者:行者123 更新时间:2023-12-04 03:46:58 25 4
gpt4 key购买 nike

我正在研究一个类的概念性伪代码信号量分配。

我想知道是否可以在某个进程调用 wait() 之前在信号量上调用 signal()。例如:

Shared data:
Semaphore x = 0;

Process 1:
wait(x);
print("I'm Process 1, and Process 2 has already printed!");
terminate();

Process 2:
print("I'm Process 2!");
signal(x);
terminate();

上面的假设是不能保证首先运行哪个进程,但我们希望打印语句以正确的顺序执行(进程 2 在进程 1 之前)。如果进程 1 启动,它将等待 x。然后进程 2 将打印,发送信号 x,并允许进程 1 打印。

但是,如果进程 2 启动,它会在进程 1 等待它之前向 x 发出信号。期望的结果是 x 现在将为进程 1“预发信号”,以便它跳过 wait(x) 语句。这真的会发生吗?或者是否会因为您无法向没有人等待的信号量发出信号而出现某种错误?

最佳答案

信号量的wait()和signal()定义如下

**wait**(Semaphore S)
{
while S<=0
; //no operation
S--;
}
**signal**(S)
{
S++;
}

在您的代码中,信号量初始化为零(信号量 x = 0),如果您尝试等待它,则该进程将被阻塞,正如您从等待的定义中看到的那样。这意味着第一个进程永远不会在不调用 signal() 的情况下继续进行第二个过程。

如果第二个进程先执行(signal()),信号量的值就会增加1,这样任何等待它的进程都可以继续进行而不等待。(即进程2得到wait(),它会立即继续)

关于signals - 信号量 : Can you signal before wait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15015665/

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