Что касается потоков, у меня есть мьютекс и условные обозначения, чтобы я мог легко манипулировать ими.
Однако, если я создаю два процесса на 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
Тогда кажется, ввести бесконечный цикл.
В чем проблема?
И какой правильный способ сделать чередующиеся процессы?
Спасибо.
Я надеюсь, что вы будете делать это как упражнение и * do * знать, что ОС позаботится о блокировании процессов, когда труба будет заполнена или пуста по мере необходимости, да? – dmckee
Nope.Это действительно упражнение, но мой профессор никогда не читает лекции о способе работы ОС в отношении процессов, связанных с различными ситуациями в трубах. – octref