我的理解是,Rust 中的任务之间不可能共享可变状态,那么为什么 Rust 有这样的东西mutexes https://doc.rust-lang.org/std/sync/struct.Mutex.html在语言中?他们的目的是什么?
“不允许在任务之间共享可变数据”过于简单化了。无意冒犯,它也被用在 Rust 的许多介绍性材料中,并且有充分的理由。但事实是,Rust 只是想摆脱数据竞争;不共享任何内容是首选方法,但不是唯一的方法。 Rust 也想成为像 C 和 C++ 一样意义上的系统编程语言,所以它不会随心所欲完全地删除一些功能或性能优化。然而,一般来说,共享可变内存并不安全(数据竞争等),因此如果您想要它,您必须通过将其包装来承认责任unsafe
blocks.
幸运的是,使用共享可变内存的一些模式are安全(例如使用适当的锁定规则)。当这些模式被认识并认为足够重要时,有人会写一些unsafe
他们说服自己(或者甚至“证明”)的代码暴露了一个安全的界面。换句话说:使用接口的代码永远不能违反 Rust 的各种安全要求。例如,虽然Mutex
允许您在不同时间从不同任务访问可变内存,但它绝不允许aliasing任务之间(即同时访问),因此可以防止数据竞争。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)