Привет, ребята, что я недавно начал, и я не очень хорошо использую семафоры. То, что я пытаюсь сделать, состоит в том, чтобы один процесс отображал число (например, 1), а другой дисплей процесса 2, а затем переключился обратно на первый дисплей процесса 3, а затем вернулся ко второму индикатору процесса 4 и так далее .... На данный момент я смог отобразить 1, затем 2, затем 3, но, к сожалению, он возвращается к 1 вместо отображения 4. Как я могу отобразить 4. Пожалуйста, помогите :)Семафоры, защищенные оболочкой C
//critical.c
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#include <stdlib.h>
#include "se_sems.h"
int main(int argc, char argv[])
{
const int ONE_DONE = 0;
const int TWO_DONE = 1;
volatile int flag = ONE_DONE;
//Use our source file as the "key"
int id = se_semget("critical.c",1);
int pid = fork();
if (pid) {
//P1
while(1) {
flag = ONE_DONE;
se_wait(id);
printf("2222222222 \n");
printf("22222222222 \n");
fflush(stdout);
se_signal(id);
flag = TWO_DONE;
do {
sleep(1);
} while (flag == ONE_DONE);
printf("444444444444 \n");
printf("44444444444 \n");
se_signal(id);
}
} else {
//P2
while (1) {
flag = TWO_DONE;
se_wait(id);
printf("1111111 \n");
printf("1111111 \n");
fflush(stdout);
se_signal(id);
flag = ONE_DONE;
do {
sleep(1);
} while (flag == TWO_DONE);
printf("33333333 \n");
printf("3333333333 \n");
se_signal(id);
}
}
}
выход
1111111
1111111
2222222222
22222222222
33333333
3333333333
1111111
1111111
444444444444
44444444444
2222222222
22222222222
33333333
3333333333
1111111
1111111
444444444444
44444444444
и так далее :)
Это ** C++ ** или ** C **? Поскольку первый комментарий в опубликованном вами файле предполагает, что это ** C **. Также исправление отступов поможет людям помочь вам. – Galik
Вы используете 'флаг' как метод связи после вилки? – Leeor
О да, спасибо, что это C не C++ – Jacob1300x