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

std::sync::Mutex::get_mut() 为何未被标记为 unsafe?

文档说明

返回底层数据的可变引用。
由于此调用以可变方式借用Mutex,因此无需实际执行锁定——可变借用可静态保证不存在任何锁。

问题核心在于无需锁定这一点。若Mutex未被(直接或间接)用于unsafe块中,不会有任何线程持有它的引用,也就无法对其操作。这意味着,要编译get_mut的调用,所有曾使用该Mutex的线程必须已执行完毕。新线程访问Mutex保护的数据也没问题,因为它会以类似获取语义的方式读取内存,通过get_mut对数据的变更对新线程可见。

但如果Mutex被用于unsafe块中,可能存在某些线程(如FFI场景)仍持有指向该Mutex的指针:这些线程可能仍持有锁并操作数据,或刚完成修改并解锁。前者显然属于未定义行为(UB),后者会引发竞态条件,同样是UB——调用get_mut的线程可能无法看到另一线程通过指针更新的最新数据状态。要让调用get_mut的线程看到最新变更,需遵循获取/释放语义,但get_mut并未执行任何获取操作。

get_mut本身实用,但它并非线程安全,因此应被标记为unsafe。


内容的提问来源于stack exchange,提问作者Anton Dyachenko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:04:58