LINUX.ORG.RU

Передача данных через семафоры

 


0

2

Доброго времени суток. Суть проблемы - пишу курсовой на с. Необходимо сделать передачу данных(массив) используя семафоры. Сперва я сделал передачу через pipe, используя семафоры для поочередного доступа к ресурсу. Но преподаватель указал на текст задания, а там написано:

никаких дополнительных средств коммуникации между процессами не использовать, только семафоры.

т.е. FIFO, разделяемую память и т.п. использовать нельзя. Может кто подскажет, как это реализовать?

Заранее огромное спасибо



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

Передай своему преподу, что он либо не умеет формулировать задачи, либо совсем поехавший.

Ну и, поскольку каждый семафор - это счетчик, можно делать так: создаешь несколько десятков семафоров, и кодируешь каждым из них 1 бит (например, захваченный семафор - 1, незахваченный - 0); вся совокупность семафоров кодирует двоичное число (размер файла). Дальше делаешь так же, как и раньше, просто твой «разделяемый ресурс» состоит из одних только семафоров.

Наверное, в SysV-семафорах можно исхитриться и передать число через сам семафор, но мне лень читать маны :)

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

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

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

Единственный вариант, который приходит в голову, это в первом процессе присваивать какой-то переменной значение одного из размеров файла, а во втором - считывать это число, выводить на печать и обнулять

Без разделяемой памяти это невозможно.

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

вся совокупность семафоров кодирует двоичное число (размер файла).

И еще один семафор на признак готовности данных.

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

вся совокупность семафоров кодирует двоичное число (размер файла).

Каждый семафор в наборе - это байт данных. Массив передавать используя semctl с GETALL, два других семафора использовать для синхронизации приёмника и передатчика. Задача нормальная и интересная, а те, кто на препода пеняет - это обычное тупое ЛОРовское быдло.

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

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

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

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

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