Семафоры POSIX: получить PID - PullRequest
1 голос
/ 13 июня 2011

Можно ли эмулировать примитив System V semctl(semid,0,GETPID,0) в среде с использованием семафоров POSIX?

Если это невозможно, я ищу способ узнать, кто сделал последнюю операцию на семафоре, я объясню лучше ...разработка UDP-сервера с предварительно разветвленными дочерними элементами.Отец обращается с SIGCHLD, чтобы возродить мертвого ребенка.Если ребенок умирает в критическом разделе (а именно, он еще не сделал sem_post), отец должен признать эту ситуацию и разблокировать семафор.

Ответы [ 2 ]

1 голос
/ 13 июня 2011

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

Вы можете подумать о том, чтобы прикрепить некоторую информацию о состоянии к каждому семафору (", который сделал последний Вниз на этом семафоре ? ").Но затем, если нескольким процессам разрешено выполнять обработку семафора (семафор начинается со значения, превышающего 1), вам придется синхронизировать способ обновления этой информации - обратно в квадрат 1.

0 голосов
/ 13 июня 2011

То, что вы хотите, не может быть сделано. Вы можете частично эмулировать это поведение, написав свой собственный семафор, основанный на надежных мьютексах POSIX (но у него есть некоторые недостатки, такие как отсутствие защиты от асинхронного сигнала), или вы можете просто использовать надежный мьютекс вместо семафора.

...