我很早就接受了考试,但是这段代码遇到了很大的麻烦,它编译但是我不知道它为什么会阻塞。
在Ubuntu 16.04上没有使用gcc的最新版本编译的警告没有错误,标题位于common.h
且它们是正确的:
#include "common.h"
int main()
{
printf("Hello world!\n");
pid_t pid;
int shm = shmget(IPC_PRIVATE, sizeof(Esame), IPC_CREAT | 0664);
int sem = semget(IPC_PRIVATE, 3, IPC_CREAT | 0664);
semctl(sem, MUTEX, SETVAL, 1);
semctl(sem, PRENOTATI, SETVAL, 1);
semctl(sem, APPELLO, SETVAL, 1);
Esame* e = (Esame*)shmat(shm, 0, 0);
e->prenotati = 0;
pid = fork();
if (pid == 0)
{
docente(sem, e);
exit(0);
}
int i = 0;
while (i < NSTUDENTI)
{
pid = fork();
if (pid == 0)
{
studente(sem, e);
exit(0);
}
i++;
}
i = 0;
while (i < NSTUDENTI + 1)
{
wait(0);
i++;
}
shmctl(shm, IPC_RMID, 0);
semctl(sem, 0, IPC_RMID);
return 0;
}