Linux kernel 保护多处理器中的共享内存区域

Linux kernel 保护多处理器中的共享内存区域,linux-kernel,multiprocessing,Linux Kernel,Multiprocessing,情况是,我有两块板通过PCIE总线连接在一起。一块板是根端口,一块板是端点。端点端将内存区域导出到根端口端 两个板之间的通信通过软件消息队列实现。队列元数据和缓冲区都位于导出的内存区域内 双方可以同时访问内存区域(rootport通过其PCIE总线,端点通过其本地总线)。当双方都试图更新队列元数据时,这可能会导致问题 起初,我试图在同一个导出内存区域上分配一个spinlock\u t,但由于每个板都是单处理器,spinlock\u t无论如何都不会分配 请任何人建议一种保护共享区域的机制,或建议

情况是,我有两块板通过PCIE总线连接在一起。一块板是根端口,一块板是端点。端点端将内存区域导出到根端口端

两个板之间的通信通过软件消息队列实现。队列元数据和缓冲区都位于导出的内存区域内

双方可以同时访问内存区域(rootport通过其PCIE总线,端点通过其本地总线)。当双方都试图更新队列元数据时,这可能会导致问题

起初,我试图在同一个导出内存区域上分配一个
spinlock\u t
,但由于每个板都是单处理器,
spinlock\u t
无论如何都不会分配


请任何人建议一种保护共享区域的机制,或建议两个板之间进行通信的其他方法。欢迎提出任何建议。非常感谢

感谢您到目前为止的关注

最后实现了循环队列的共享内存通信。可以从中引用实现。我们将问题简化为单个生产者和单个消费者,因此循环队列不需要锁来保护。这种方法的局限性是我们必须为每个对等连接创建一个队列


在PCIE规范中,也有部分描述了原子操作,不幸的是,我们的PCIE主机控制器不支持此功能,因此我们无法使用此功能。

我认为您应该尝试用信号量代替自旋锁…因为在单处理器系统上,自旋锁没有用处!!!