至於線程,我有互斥和條件,所以我可以很容易地操縱它們。
但是,如果我通過fork()
創建兩個進程,我怎麼能使它們交替?
或者,有什麼辦法可以爲流程創建「關鍵部分」?如何使流程交替?
我打算做一個打印「r」和「w」的程序,下面是代碼。
#include <stdio.h>
#include <stdlib.h>
int pipe_1[2];
int flag = 0;
void r();
void w();
int main() {
pipe(pipe_1);
if(fork())
r();
else
w();
}
void r() {
int count = 0;
while(1) {
printf("%d \n", flag);
if (count == 10)
exit(0);
if(flag == 0) {
puts("r");
flag = 1;
count++;
while(flag == 1)
;
}
}
}
void w() {
while(1) {
if(flag == 1) {
puts("w");
flag = 0;
while(flag == 0)
;
}
}
}
該出把只有:
0
r
然後似乎進入一個無限循環。
有什麼問題?
什麼是交替過程的正確方法?
謝謝。
我相信你是在做這個練習,並且*知道操作系統將在管道滿或空時根據需要處理阻塞進程,是的? – dmckee 2013-05-05 00:58:17
不是。這確實是一個練習,但我的教授從來沒有講過關於操作系統處理不同管道情況的過程的方式。 – octref 2013-05-05 01:01:04