以下是基于 Rust 语言实现的生产者 - 消费者内存共享通信程序,特别处理了消费者验证数据归属的逻辑:
rust-producer-consumer-ipc
Rust版生产者-消费者内存共享通信程序
V1
生成 lib.rs
生成 producer_main.rs
生成 consumer_main.rs
这个 Rust 实现包含以下关键特性:
数据验证机制:
消费者在获取锁后首先检查头部中的 consumer_id
如果数据不属于自己,立即释放信号量,不处理数据
实现了 CRC32 校验确保数据完整性
内存共享设计:
使用 Windows API 创建命名共享内存区域
每个生产者 - 消费者对使用独立的共享内存和信号量
头部和图像数据存储在连续内存中
同步机制:
使用两个信号量实现生产 - 消费同步
生产者等待消费者消费完成信号
消费者等待生产者生产完成信号
错误处理:
完整的错误处理机制
边界检查和数据验证
异常情况下的信号量释放
扩展性:
可以轻松添加更多生产者 - 消费者对
支持多种图像格式
线程安全设计
使用时,先运行生产者程序,再运行消费者程序。生产者将生成模拟图像数据并发送给对应的消费者,消费者会验证数据归属并处理属于自己的数据。
【 在 AlphaO 的大作中提到: 】
: 谢谢。
: 虽然现在我就类似这样,用Windows API实现的(信号邮箱用于交互元信息),但其实到头来还是得“拷贝”,从进程A的数据结构T,拷贝一部分结构T2到共享内存块SharedMemory中,然后共享给B进程映射回T2。
: 这里面多了一个拷贝到内存块的过程,看起来不是完全态的共享内存。
: ...................
附件(3.7KB) rust-producer-consumer-ipc.zip--
FROM 111.4.64.*