我已经在用户空间中创建了一个Linux驱动程序。我创建了一个内存映射共享文件,它映射到一些自定义HW寄存器。
驱动程序将执行通常的读取 - 修改 - 写入,因此我需要某种锁定以确保同步。
我正在制作的驱动程序可以被许多进程使用,当然还有线程,因此我想知道哪种方法可以解决这个问题。
这样std :: mutex是否足以处理这种情况?我已经读过std :: mutex对多进程应用程序不起作用,这是真的吗?
我无法使用Boost库。
答案 0 :(得分:0)
您可以创建一个守护程序(一个普通程序),它实际上是mmap()并访问HW寄存器,并启用某种接口与其他程序通信(例如dbus,或您选择的任何IPC消息队列机制)
这样,您不必担心多个线程或进程是否会同时访问同一个寄存器,从而避免竞争条件。
当然,在有人试图访问你的硬件之前,这个守护进程必须运行。像蓝牙的守护进程(man bluetoothd)。
答案 1 :(得分:0)
假设您正在运行与硬件结合使用的定制软件,最简单的解决方案就是flock
。更细粒度的方法是fcntl(F_SET_LK)
,但这是设计破坏的(Linux可能会在您关闭不相关的文件描述符时释放锁定!)。