我很難理解如何在使用信號量的兩個進程之間交替控制。這是流程處理代碼的一個人爲的例子。使用信號量同步進程
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