是否存在不同类型的竞争条件?

Are there different types of race conditions?

我知道存在数据竞争,是否可以将其他竞争条件分解为不同的类别?

归根结底,所有竞争条件都是由于以错误的顺序访问数据,因此导致线程行为不当,但数据竞争是一种非常特殊的情况,即同时读取、更改和写入数据,对吗?

还有什么会导致竞争条件?

线程问题可以这样分类:

正确性(没有坏事发生)

  • 竞争条件

活跃度(好事终会发生)

  • 死锁
  • 饥饿
  • 活锁

我不知道竞争条件的进一步分类。

数据竞争是一个更底层的问题,如果您在同一内存位置上有冲突的内存访问(因此其中至少有一个是写入)并且这些不是按发生在关系之前的顺序排序,就会发生这种情况。数据竞争是内存模型的一部分,例如 Java 内存模型和 C++ 11 的内存模型。竞争条件和数据竞争是不同类型的问题。