是否存在不同类型的竞争条件?
Are there different types of race conditions?
我知道存在数据竞争,是否可以将其他竞争条件分解为不同的类别?
归根结底,所有竞争条件都是由于以错误的顺序访问数据,因此导致线程行为不当,但数据竞争是一种非常特殊的情况,即同时读取、更改和写入数据,对吗?
还有什么会导致竞争条件?
线程问题可以这样分类:
正确性(没有坏事发生)
- 竞争条件
活跃度(好事终会发生)
- 死锁
- 饥饿
- 活锁
我不知道竞争条件的进一步分类。
数据竞争是一个更底层的问题,如果您在同一内存位置上有冲突的内存访问(因此其中至少有一个是写入)并且这些不是按发生在关系之前的顺序排序,就会发生这种情况。数据竞争是内存模型的一部分,例如 Java 内存模型和 C++ 11 的内存模型。竞争条件和数据竞争是不同类型的问题。
我知道存在数据竞争,是否可以将其他竞争条件分解为不同的类别?
归根结底,所有竞争条件都是由于以错误的顺序访问数据,因此导致线程行为不当,但数据竞争是一种非常特殊的情况,即同时读取、更改和写入数据,对吗?
还有什么会导致竞争条件?
线程问题可以这样分类:
正确性(没有坏事发生)
- 竞争条件
活跃度(好事终会发生)
- 死锁
- 饥饿
- 活锁
我不知道竞争条件的进一步分类。
数据竞争是一个更底层的问题,如果您在同一内存位置上有冲突的内存访问(因此其中至少有一个是写入)并且这些不是按发生在关系之前的顺序排序,就会发生这种情况。数据竞争是内存模型的一部分,例如 Java 内存模型和 C++ 11 的内存模型。竞争条件和数据竞争是不同类型的问题。