LINUX.ORG.RU

Вопрос по семафорам

 ,


0

3

Доброго времени суток. Извиняюсь за ламерский вопрос. Насколько я понял, с помощью семафора можно контролировать доступ к какому-то ресурсу. У меня по заданию есть ветка процессов, первый из которых считывает файлы из директории и передает предпоследнему процессу эти размеры с помощью семафоров. Я слабо разобрался, но по-моему, семафор - это переменная, которую процессы не могут менять одновременно и система гарантирует, что они будут менять ее по очереди. Для меня семафор это что-то вроде переключателя и я слабо представляю, как с его помощью можно передавать массив размеров из одного процесса в другой. Подскажите пожалуйста, что почитать, чтобы лучше вникнуть.

Возможно, передавать нужно через канал, а семафором гарантировать правильность передачи.

CrossFire ★★★★★ ()

семафор это что-то вроде переключателя

Так дальше и понимай.

Для передачи используй либо pipe, либо FIFO

AlexVR ★★★★★ ()

Семафоры позволяют сериализовать доступ к общим данным из разных потоков/процессов и таким образом обеспечить защиту этих данных. Семафор может выполнять разные задачи, все зависит от способа его использования. В частности от значения, которым он инициализируется. Судя по всему тебе по заданию требуется передать данные из одного процесса в другой с использованием семафоров. Тогда вариант только один - использовать разделяемую память в качестве механизма IPC и разместить в ней два семафора.

m0rph ★★★★★ ()
Ответ на: комментарий от m0rph

вариант только один - использовать разделяемую память в качестве механизма IPC и разместить в ней два семафора.

Скорее всего это лаба на SysV IPC, и никаких семафоров в разделяемой памяти размещать не нужно.

tailgunner ★★★★★ ()
Ответ на: комментарий от val-amart

зачем два?

Один для процесса-производителя «data written», второй для процесса-потребителя «data read». Ну это для случая, когда передача данных производится больше одного раза. Для однократной передачи данных достаточно и одного семафора.

m0rph ★★★★★ ()
Последнее исправление: m0rph (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Вау.

Рассказал бы поподробнее что ли, что тебя так изумило. Может я заблуждаюсь и чему-то научусь. Глупо выглядят явно провоцирующие комментарии без конкретики.

m0rph ★★★★★ ()
Ответ на: комментарий от m0rph

явно провоцирующие комментарии без конкретики

это лор, детка ;D

val-amart ★★★★★ ()
Последнее исправление: val-amart (всего исправлений: 1)
Ответ на: комментарий от m0rph

я все равно не понимаю твоей идеи.

делаешь список, защищаешь его мьютексом. каждый элемент — один кусок передаваемых данных. и один семафор в который постишь каждый раз когда добавляешь данные.

val-amart ★★★★★ ()
Ответ на: комментарий от m0rph

Рассказал бы поподробнее что ли, что тебя так изумило.

Ну я просто отвык от эмуляции condvar-ов на mutex-ах, а так вроде должно работать. Но, если у ТС действительно лаба по SysV, подозреваю, что semop позволяет обойтись одним семафором.

tailgunner ★★★★★ ()

советую

The Little Book on Semaphores

kvap ()
Ответ на: комментарий от val-amart

я все равно не понимаю твоей идеи.

А можно два семафора в режиме condition variable без мьютекса. Первый поток пишет данные, постит семафор dataWritten и начинает ждать на семафоре dataRead. Второй поток ждет на семафоре dataWritten, после чего читает данные и постит семафор dataRead. Я не говорю, что это лучший вариант, просто ТС обозначил проблему IPC между процессами и упомянул семафоры.

m0rph ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.