我正在为一个类进行概念性伪代码信号量分配。
我想知道是否可以在某个进程调用 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) 语句。这真的会发生吗?还是会出现某种错误,因为您无法发出没有人在等待的信号量?