我很难理解如何在使用信号量的两个进程之间交替控制。这是流程处理代码的一个人为的例子。使用信号量同步进程
int pid = fork();
if (pid) {
int counter = 0;
while (true) {
counter += 1;
printf("P%d = %d", pid, counter);
}
} else {
int counter = 0;
while (true) {
counter += 1;
printf("P%d = %d", pid, counter);
}
}
我期待上面的代码并行运行,但它似乎是控制流继续为即时分叉过程,后来才恢复父进程。
这是从根本上打破了使用信号来控制哪些程序可以充当我现有的代码。
int id = get_semaphore(1);
int pid = fork();
if (pid) {
int counter = 0;
while (true) {
sem_wait(id);
counter += 1;
printf("P%d = %d\n", pid, counter);
sem_signal(id);
}
} else {
int counter = 0;
while (true) {
sem_wait(id);
counter += 1;
printf("P%d = %d\n", pid, counter);
sem_signal(id);
}
}
sem_wait
的辅助刚刚从信号量的值和块直到结果减去1> 0(使用semop
罩下)。的
sem_signal
辅助只是增加了1到信号量的值(发动机罩下使用semop
)。
我想代码以两个过程之间交替,使用sem_wait
阻止,直到其他过程与sem_signal
释放资源。所期望的输出将是:
P1 = 0
P0 = 0
P1 = 1
P0 = 1
...
然而,由于过程之间的初始执行延迟,子过程需要可用的信号量的资源,用它来打印数,则其恢复和循环 - 在该点该资源再次可用,因此它不会等待其他进程。
什么是防止利用资源的过程,如果他们释放自己的最好方法?
您需要两个信号量和一个“executeNow”单元。在进程之间来回传递单元。 – ThingyWotsit