Помогите разобраться с семафорами

Автор: iam0x70 Дата: 19.09.2003 15:48 Программа должна печатать слова до тех пор
пока не получит что-то с клавиатуры.
Не пойму почему семафоры не работают.

#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>

int main()
{
int pid,semid,Key;
struct sembuf buf;
Key=random()/100+1;
semid=semget(Key,1,0600|IPC_CREAT|IPC_EXCL);
if(semid<0)
{
printf("****";-);
exit(1);
}
buf.sem_num=0;
buf.sem_flg=SEM_UNDO|IPC_NOWAIT;
semctl(semid,0,SETVAL,0);
pid=fork();

if(pid==0)
{


buf.sem_op=-1;
do
{
sleep(1);
printf("Hello ";-);

}while(semop(semid,(struct sembuf *)&buf,1)==-1);

}
else
{


printf("Enter something... ";-);
getchar();
buf.sem_op=1;
semop(semid,(struct sembuf *)&buf,1);
semctl(semid,0,IPC_RMID,0);


}

return 0;

}

p.s.
Как правильно выделить память для двумерного массива?
Re: Помогите разобраться с семафорами 20.09.2003 21:12leXa ну замутил..Улыбка Напиши русским языком логику работы проги, я пока понял так, что:
1. родитель висит в getchar
2. ребеночек спит секундочку и затем пытается уменьшить значение семафора на 1, но семафор инициализирован нулевым значением и данная операция просто блокируется
Это то, что требуется от этой проги? Наверное, в дочернем процессе надо
поймать увеличение значения семафора после того, как родитель его "набавит". И наверное, выдержать паузу перед "убийством" семафора IPC_RMID, ведь ребеночек может в это время начать засыпать Улыбка
Тема мутная, посмотри доки на предмет ожидания и установки семафора...
RSS-материал