仅在Rust中编写的软件能完全避免竞争条件吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅在Rust中编写的软件能完全避免竞争条件吗?相关的知识,希望对你有一定的参考价值。

维基百科defines a race condition为:

竞争条件或竞赛危险是电子,软件或其他系统的行为,其中输出取决于其他不可控事件的顺序或时间。当事件没有按程序员的意图发生时,它就变成了一个bug。

Rust is a:

安全,并发,实用的语言

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

答案

没有。

我见过竞争条件:

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

程序在数据竞争中演变的环境,编程语言无法实现,只能接受它。


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

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

  • data race:在没有同步的情况下由另一个线程读取/写入值时修改值,结果行为是不可预测的(特别是涉及优化器时),
  • 竞争条件:一系列事件的计时问题,产生的行为是一小组可能的行为之一。它可以通过同步来解决,但这不是唯一的解决方案。

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

以上是关于仅在Rust中编写的软件能完全避免竞争条件吗?的主要内容,如果未能解决你的问题,请参考以下文章

避免 redis 竞争条件

如何避免 VxWorks 中条件变量中的竞争条件

如何在我的 Rails 应用程序中避免竞争条件?

如何在记录付款和运行余额的 Rails 模型中避免竞争条件?

如何使用 PHP 单元测试避免竞争条件

如何动态锁定线程并避免竞争条件