у меня что то не получается за синхронизировать 4 процесса, тоесть я хочу чтобы выводила 1,2,3,4 а оно выводит 3,1,2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/types.h>
#define KEY 1147
#define KEY2 1148
#define KEY3 1149
int main(void)
{
pid_t a;
pid_t b;
int semid,semid2,semid3;
struct sembuf sem_wait[2] = { {0, -1, 0}, {0, 1, 0} };
struct sembuf sem_wait2[2] = { {0, -1, 0}, {0, 1, 0} };
struct sembuf sem_wait3[2] = { {0, -1, 0}, {0, 1, 0} };
if( (semid = semget(KEY, 2, 0666 | IPC_CREAT)) < 0)
{
perror("semget");
return -1;
}
if( (semid2 = semget(KEY2, 2, 0666 | IPC_CREAT)) < 0)
{
perror("semget");
return -1;
}
if( (semid3 = semget(KEY3, 2, 0666 | IPC_CREAT)) < 0)
{
perror("semget");
return -1;
}
if( (a = fork()) && (b = fork())< 0)
{
perror("fork");
return -1;
}
//-------------------------------------------
if(a==0 && b>0)
{
semop(semid2, &sem_wait2[0], 1);
printf("3\n");
semop(semid3, &sem_wait3[1], 1);
}
if(a==0 && b==0)
{
semop(semid3, &sem_wait3[0], 1);
printf("4\n");
}
if(a>0 && b==0)
{
semop(semid, &sem_wait[0], 1);
printf("2\n");
semop(semid2, &sem_wait2[1], 1);
}
if(a> 0 && b> 0)
{
printf("1\n");
semop(semid, &sem_wait[1], 1);
}
return 0;
}
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.