为什么在 Rust 中为 RwLockReadGuard 和 RwLockWriteGuard 实现 !Send 特征?

问题描述 投票:0回答:1

我最近在尝试使用

RwLock
返回的“Lock Guards”创建并行系统时遇到了问题。由于我的系统的架构设计,我需要存储这些锁。令我惊讶的是,存储这些锁防护的类型未能实现 Send 特征,这促使我探索这些防护的源代码实现,果然,我发现了为这些类型实现的 !Send 特征。

我找不到任何可行的解释来解释为什么要为这些类型实现 !Send 特征。那么为什么这是 Rust 标准库中定义的行为呢?

(我的猜测是,RwLock 在其结构中使用了 sys::RwLock,它存储了 AtomicU32,它必须是线程本地状态,因为一般来说我们不能跨线程边界传输任何内容,这取决于线程本地状态生成锁的线程,但我又不太确定)

multithreading rust synchronization thread-safety
1个回答
0
投票

这是因为在常见平台上,必须在获取锁的同一线程上释放锁。由于 Rust 使用平台的同步原语,因此它必须遵守这一点。

© www.soinside.com 2019 - 2024. All rights reserved.