非常感谢,代码级指导,很有启发!
很值得参考,看着像是AI生成的,但质量看着很高,这个AI有点厉害。
先写lib再写app的风格,实在要赞美
这几天我也改善了一下,因为我发现共享内存其实不存在Send和Sync的问题,是可以天然多线程处理的。所以现在我从图像流的源头(GPU输出),就直接创建共享内存,从GPU Buffer直接拷贝到SharedMemory (不再经过原本的Vec<u16>图像缓冲图),而后所有后续地方都用Arc<SharedMemory>传递。结构大致为
unsafe impl Send for SharedMemory {}
unsafe impl Sync for SharedMemory {}
pub struct SharedMemory {
handle: HANDLE,
mapping: MEMORY_MAPPED_VIEW_ADDRESS,
pub size: usize,
pub header_size: usize,
pub cursor: usize,
}
impl SharedMemory {
#[inline]
pub fn as_ptr(&self) -> *mut u8 {
self.mapping.Value as *mut u8
}
#[inline]
pub fn write(
&mut self,
data: &[u8],
) {
unsafe {
let ptr = self.as_ptr().add(self.cursor);
std::ptr::copy(data.as_ptr(), ptr, data.len());
self.cursor += data.len();
}
}
}
impl Drop for SharedMemory {
//
}
【 在 xiaokang 的大作中提到: 】
: 以下是基于 Rust 语言实现的生产者 - 消费者内存共享通信程序,特别处理了消费者验证数据归属的逻辑:
: rust-producer-consumer-ipc
: Rust版生产者-消费者内存共享通信程序
: ...................
--
FROM 123.127.159.*