rust - 仅用 Rust 编写的软件能否完全避免竞争条件?

标签 rust race-condition

维基百科 defines a race condition作为:

A race condition or race hazard is the behavior of an electronics, software, or other system where the output is dependent on the sequence or timing of other uncontrollable events. It becomes a bug when events do not happen in the order the programmer intended.

Rust is一个:

safe, concurrent, practical language

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

最佳答案

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

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

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


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

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

  • 数据竞争:当一个值被另一个没有同步的线程读/写时修改一个值,由此产生的行为是不可预测的(尤其是当涉及优化器时),
  • 竞争条件:一系列事件的时间问题,由此产生的行为是一小组可能行为中的一个。可以通过同步来解决,但这不是唯一的解决办法。

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

关于rust - 仅用 Rust 编写的软件能否完全避免竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49023664/

相关文章:

rust - 如何在 actix 处理程序中设置查询参数的默认选项?

rust - 如何编写 Rust by Example 中的转置函数示例?

multithreading - 等待共享计时器的多个 go 例程导致竞争

php - ajax状态检查的实现

c++ - 我怎样才能使公共(public)共享对象的访问线程安全?

rust - 为什么 'static 函数参数不能使整个程序都活起来?

ssl - 为什么 reqwest 需要安装 OpenSSL?

c - Posix 线程锁定 : waiting forever

go - 拉 0 大小的 golang chan

rust - 如何防止移入功能的 impl Trait 在借用时被删除?