Как я могу синхронизировать доступ двух процессов к одним и тем же ресурсам? - PullRequest
1 голос
/ 01 ноября 2009

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

Спасибо за помощь,

-nm

Ответы [ 2 ]

0 голосов
/ 01 ноября 2009

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

Вопрос в том, какой язык вы используете? Какая ОС (я предполагаю, что Linux). Большинство языков поддерживают многопоточность и взаимное исключение, и вы должны использовать встроенные конструкции.

Например, используя C в Linux, вы можете захотеть

включает семафор.h

и найдите вызовы для sem_init, sem_wait и т. Д.

0 голосов
/ 01 ноября 2009

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

Когда вы работаете с отдельными процессами, стандартный способ сделать это в Linux - создать что-то в /var/lock, например /var/lock/myapp.lock, и поместить свой PID, за которым следует новая строка, Затем другие процессы проверят его существование, и, если вы хитроумны, проверьте PID, чтобы убедиться, что он все еще жив.

Если вам нужен доступ к области в режиме реального времени, пропустите файловую систему, и процессы должны будут обмениваться данными через IPC (LET_ME_KNOW_WHEN_DONE, OKAY_IM_DONE, вы поняли), или - лучше - написать процесс чья единственная цель - чтение и запись в память GPIO, а другие ваши программы обмениваются данными с it через IPC (вероятно, лучший подход).

...