Примитивы кроссплатформенной синхронизации, позволяющие определить, какой PID их использует - PullRequest
1 голос
/ 20 июня 2019

Мне нужно спроектировать оболочку для примитива синхронизации процесса, который действует как семафор с, скажем, пределом 1 (так что только один клиент может заблокировать его одновременно).Если бы это было единственным требованием, тогда я мог бы просто использовать именованные семафоры.Но я также хотел бы знать, в тех случаях, когда клиент не может заблокировать примитив, который фактически заблокировал его.Лучше всего знать идентификатор процесса блокировки.Я вижу, как я могу добиться этого в системах POSIX с semctl и GETPID, но Windows не предоставляет ничего подобного.Мне также известно, что я могу легко добиться этого с помощью файлов (например, открывая известный файл с общими правами на чтение и без общего доступа - при блокировке клиент создает этот файл и пишет его PID, чтобы другие могли его прочитать), но по возможностиЯ хотел бы использовать реальные примитивы API OS вместо файловой системы.Это возможно?

1 Ответ

2 голосов
/ 20 июня 2019

В Windows есть Обход цепочки ожидания , который позволяет увидеть, кто что заблокировал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...