int main (void){ int segmento1; int i, j; int *var; int pid; int semId; segmento1 = shmget(IPC_PRIVATE, sizeof(char) * 16, IPC_CREAT | IPC_EXCL| S_IRUSR | S_IWUSR); var = (int *)shmat(segmento1, 0, 0); semId = semget (8752, 1, 0666 | IPC_CREAT); setSemValue(semId); *var = 0; pid = fork(); while(1) { if(pid > 0) //pai { semaforoP(semId); *var+=1;; semaforoV(semId); printf("var (pai) = %d \n", *var); } else if(pid == 0) { semaforoP(semId); *var+= 5; semaforoV(semId); printf("var (filho) = %d \n", *var); } sleep(2); } }
int main (int argc, char * argv[]) { int i; char letra = 'o'; int semId; // processo que espera 2 segundos if (argc > 1) { semId = semget (8752, 1, 0666 | IPC_CREAT); setSemValue(semId); letra = 'x'; sleep (4); } // processo que espera 4 segundos else { while ((semId = semget (8752, 1, 0666)) < 0) { putchar ('.'); fflush(stdout); sleep (2); } } // area sincronizada pelo semaforo for (i=0; ; i++) { semaforoP(semId); printf ("\nProcesso %d iniciado\n", getpid()); putchar (toupper(letra)); fflush(stdout); sleep (rand() %3); putchar (letra); fflush(stdout); printf ("\nProcesso %d parado\n", getpid()); semaforoV(semId); sleep (rand() %2); } printf ("\nProcesso %d terminou\n", getpid()); if (argc > 1) { sleep(10); delSemValue(semId); } return 0; }