#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "display.h"
#include <sys/ipc.h>
#include <sys/sem.h>
int main()
{
int i;
struct sembuf up = {0,1,0};
struct sembuf down = {0,-1,0};
int sem0 = semget(IPC_PRIVATE,1,0600);
int sem1 = semget(IPC_PRIVATE,1,0600);
if (fork())
{
for (i=0;i<10;i++)
display("ab");
semop(sem1,&up,1);
semop(sem0,&down,1);
wait(NULL);
}
else
{
for (i=0;i<10;i++)
semop(sem1,&down,1);
display("cd\n");
semop(sem0,&up,1);
semop(sem1,&down,1);
}
semctl(sem0,0,IPC_RMID);
semctl(sem1,0,IPC_RMID);
return 0;
}
Я хочу выход быть
ABCD
ABCD
ABCD
...
Вместо зашифрованное выход я без семафоров. Код выше - это то, что я сделал до сих пор, но он, похоже, не работает, поскольку я не помещаю взлеты и падения должным образом, я полагаю. Я новичок во всей процедуре синхронизации и субъекте мьютекса, и это часть упражнения, поэтому любой код, не связанный с семафором, не может быть изменен. если вы сможете подробно рассказать о своих ответах, это было бы здорово.синхронизации выходного сигнала с помощью сист семафоры
EDIT: это функция отображения из файла заголовка, если это необходимо.
void display(char *str)
{
char *p;
for (p=str; *p; p++)
{
write(1, p, 1);
usleep(100);
}
}