【问题标题】:Could software written only in Rust fully avoid race conditions?只用 Rust 编写的软件能否完全避免竞争条件?
【发布时间】:2018-08-07 23:38:14
【问题描述】:

维基百科defines a race condition为:

竞态条件或竞态危险是电子设备、软件或其他系统的行为,其输出取决于其他不可控事件的顺序或时间。当事件没有按照程序员预期的顺序发生时,它就会成为一个错误。

Rust is一:

安全、并发、实用的语言

如果我们创建 100% Rust 的软件,我们可以避免竞争条件吗?为什么或者为什么不?

【问题讨论】:

  • 更高级的语言,或者实际上任何语言,都提供了底层硬件的抽象。不管你如何试图掩盖异常,硬件都会做它该做的事情。

标签: rust race-condition


【解决方案1】:

否。

我在以下方面看到了竞争条件:

  • 文件系统访问,
  • 数据库访问,
  • 访问其他服务。

程序在充满数据竞争的环境中发展,编程语言只能接受它。


Rust 专注于内存安全。在多线程编程的上下文中,这意味着防止数据竞争。

没有数据竞争的程序仍然可以包含竞争条件:

  • 数据争用:当值被另一个没有同步的线程读取/写入时修改值,结果行为是不可预测的(尤其是在涉及优化器时),
  • 竞态条件:一系列事件的时间问题,产生的行为是一小部分可能的行为之一。可以通过同步来解决,但这不是唯一的解决方案。

竞争条件不是内存错误。对于 Rust,这意味着它们被认为是安全的,当然它们仍然是不可取的。它们可能发生在许多不同的级别:线程之间、进程之间、服务器之间……

【讨论】:

  • 可能值得简单提一下竞态条件(Rust 没有阻止)和数据竞态(Rust 阻止)之间的区别。
  • @BurntSushi5:我试过了,请告诉我你的想法。
猜你喜欢
  • 1970-01-01
  • 2015-01-30
  • 2010-09-25
  • 2010-09-25
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多