Я использую файл сопоставления памяти между многими процессами в качестве общей очереди с несколькими записывающими устройствами и несколькими устройствами чтения. На Windows я использую именованный EventWaitHandle
для отправки сигнала о том, что в очереди могут быть новые сообщения, поэтому подписчики должны проснуться и проверить очередь на наличие возможных сообщений.
Однако на Linux и macOS с именем EventWaitHandles
не поддерживаются. Какие у меня варианты?
До сих пор я пробовал:
- Named
Semaphore
- не поддерживается в Linux и macOS FileSystemWatcher
- работает, но относительно медленно. (около 10ms
на моем Macbook для получения уведомления об изменении файла). - Named
Mutex
- хотя именованные мьютексы поддерживаются на всех платформах, я не могу понять шаблон использования, который позволяет мне повторить поведение AutoResetEvent
. Есть ли он? - Опрос (проверка сообщений + спящий режим в al oop) - это работает, но если засыпание длится дольше 2 мс, я не достигну своей цели по производительности.
Futex
- кажется очень низким уровнем для того, что мне нужно. Будет ли он работать как на Linux, так и на MacOS? И могу ли я каким-то образом p/invoke
из приложения .net core
?
Есть другие предложения?