ВУЗ:
Составители:
102
printf("%s %d %s","Parent: Setting value \"",arg.val, "\" to sema-
phores...\n");
semctl(semid, 0, SETVAL, arg); // установка значения семафора
printf("Parent: Creating child process...\n");
if ((pid = fork()) == 0) { // child process ;
printf(" Child: Child process was created...\n");
struct sembuf csmb;
unsigned short semval;
union semun carg;
int oflag = SVSEM_MODE | IPC_EXCL;
printf(" Child: Opening semaphore...\n");
int smd = semget(SKEY, 1, oflag); // открытие семафора
csmb.sem_num = 0;
csmb.sem_flg = 0;
csmb.sem_op = -1;
printf(" Child: Locking semaphore...\n");
semop(smd,&csmb,1); // блокировка семафора
printf(" Child: Do something...\n");
// работа процесса в защищенном режиме
sleep(2);
// работа процесса в защищенном режиме закончена
printf(" Child: Done something...\n");
carg.buf = NULL;
carg.array = &semval;
semctl(smd,0,GETALL,carg); // получение значения семафора
semval = *carg.array;
printf("%s %d %s"," Child: Semaphore value = ",semval,"\n");
csmb.sem_num = csmb.sem_flg = 0;
csmb.sem_op = -semval;
printf(" Child: Unlocking semaphore...\n");
semop(smd,&csmb,1);
printf(" Child: Terminating child process...\n");
exit(0);
}
Страницы
- « первая
- ‹ предыдущая
- …
- 100
- 101
- 102
- 103
- 104
- …
- следующая ›
- последняя »
