LINUX.ORG.RU

Про работу с семафором SystemV


0

0

Подскажите плз, корректно ли передавать идентификатор созданного семафора SystemV другому процессу через разделяемую память или второй процесс должен получать доступ к сумафору используя IPC-ключ?

У меня оба синхронизируемых процесса работают нормально, пока второй процесс не делает анлинк разделяемой памяти, через которую был передан идентификатор. После анлинка первый процесс в 50% случаев впадает в мертвую спячку по ожиданию семафора.

Почему это может происходить?


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

df_0903
()

А ты случайно не разместил семафор в шареной памяти которой ты сделал unlink (а может detach???) ???

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

1.в /proc/sysvipc/sem для каждого семафора указывается и ключ и идентификатор, означает ли это что работать с семафором можно зная ТОЛЬКО идентификатор?

что означают поля otime и ctime?

2.семафор создавался обычным вызовом semget с ключом IPC_PRIVATE, права 666, полученный идентификатор скопирован в разделяемую память для передачи второму процессу.

анлинк происходит посредством вызова shmctl(shmid, IPC_RMID, 0), затем shmdt

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

был неправ

первый процесс виснет когда второй завершается, а не при анлинке так что разделяемая память не причем.

Все арвно неясно почему это происходит, ведь у семафоров SystemV живучесть ядра и после завершения процесса2 семафор должен быть жив-здоров

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