You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 13:00:32