LINUX.ORG.RU

sem_post не увеличивает значение семафора

 


0

1

Доброго времени суток. Разбираюсь с семафорами, в связи с чем возник такой вопрос - функция sem_post должен увеличивать значение семафора на единицу, однако это перестает работать, когда я пробую работать с несколькими процессами. Например:

switch(proc)
    {
    	case -1:
    		fprintf(stderr, "Все плохо\n" );
    		break;

    	case 0:
    		fprintf(stderr, "Это потомок\n" );
    		
		    sem_init(&sem, 0, 1);
		    sem_post(&sem);
		    sem_post(&sem);
		    sem_post(&sem);

    		break;

    	default:
    		waitpid(proc,0,0);
    		fprintf(stderr, "Это родитель\n" );

    		sem_getvalue(&sem, &value);
    		printf("%d\n",value);


    }

В программе без fork все нормально работает, т.е. если я сделал sem_post 3 раза, то получил бы значение 4 и т.п. Подскажите пожалуйста, куда копать


Ответ на: комментарий от tailgunner

Спасибо за ответ. А можно небольшой пример как размещать семафоры в разделяемой памяти? Если честно ничего пока не нашел на эту тему

gwyllum
() автор топика
Ответ на: комментарий от gwyllum

Stackoverflow - твой друг: http://stackoverflow.com/questions/16400820/c-how-to-use-posix-semaphores-on-... - правда, здесь не лучший способ выделит разделяемю память, но для начала сойдёт.

А вообще, почитай пару хороших учебников - что-нибудь по ядру ОС и по юзерспейсному программированию.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.