Rust多线程共享切片类型时ArcSwap<Arc<[T]>>编译报错的原因及疑问
Rust多线程共享切片类型时ArcSwap<Arc<[T]>>编译报错的原因及疑问
我最近在开发一个多线程应用,包含UI线程和计算线程,想让它们共享一个元素类型为T的缓冲向量。考虑到90%的操作都是读取,我选择了ArcSwap来做同步机制。我想要实现的内存布局大概是这样的:
(示意图说明:栈上存放ArcSwap和Arc实例,堆上存储切片对应的缓冲数据块)
我原本计划使用ArcSwap<Arc<[T]>>这种类型,可Rust编译器却报错提示[T]没有实现Sized trait。这点我其实能理解——毕竟切片是动态大小类型,但我搞不明白为什么这会成为编译错误呢?
我特意去研究了ArcSwap的实现代码,发现里面的原子指针要求指向一个Sized类型,可为什么会有这个限制呢?我把相关的结构体核心定义抄在下面:
pub struct ArcSwapAny<T: RefCnt, S: LockStorage = Global> { // 注释:AtomicPtr 需要 Sized 类型 // (原代码其他内容省略) }
备注:内容来源于stack exchange,提问作者Jason Eveleth
相关产品推荐
相关产品推荐

