Защита ресурсов HW с помощью многих процессов

Я создал драйвер для Linux, который существует в пользовательском пространстве. Я создал общий файл карты памяти, который отображает некоторые пользовательские регистры HW.

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

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

Это так, что std :: mutex будет достаточно, чтобы справиться с такой ситуацией? Я читал, что std :: mutex не работает для многопроцессорных приложений, это правда?

Я не могу использовать библиотеки Boost.

0

Решение

Вы можете создать демон (обычную программу), который на самом деле выполняет mmap () и получает доступ к регистрам HW, и позволяет какой-то интерфейс взаимодействовать с другими программами (например, dbus или любым другим механизмом очереди сообщений IPC, который вы выбрали).

Таким образом, вам не нужно беспокоиться, если несколько потоков или процессов будут обращаться к одному и тому же регистру одновременно, избегая условий гонки.

Конечно, этот демон должен будет работать, прежде чем кто-то попытается получить доступ к вашему оборудованию. Что-то вроде демона bluetooth (man bluetoothd).

0

Другие решения

Предполагая, что вы работаете на заказ программного обеспечения в сочетании с аппаратным обеспечением, самое простое решение просто flock, Более мелкозернистый подход fcntl(F_SET_LK) но это нереально (Linux может снять блокировку при закрытии несвязанного файлового дескриптора!).

0

По вопросам рекламы [email protected]