线程安全和数据竞争条件是否解决了同一个问题?

Are Thread Safety and Data Race condition addressing the same issue?

我很困惑。据我了解,如果一段代码在多个线程同时执行期间正常运行,则它是thread-safedata race 当来自不同线程的 2 条指令访问同一内存位置时发生,这些访问中至少有一个是写入,并且没有同步要求这些访问之间的任何特定顺序。

很明显,两者都与并发有关。但他们是在处理同一件事吗?

如果一个程序(或其部分)存在数据竞争,那么该程序很可能不是线程安全的.

线程安全 为使用多线程的程序声明ultimate 属性。但是检查这个属性是非常困难的任务,不能完全自动执行(因为术语 正确性 在多线程情况下形式化很差)。

数据竞争声明事件,(相对)容易自动检查,并且有这个事件有高相关性线程不安全.

总结:

  1. 数据竞争 - 程序可以 线程安全.
  2. 数据竞争 - 程序不太可能 线程安全.

一些语言禁止编写带有数据竞争的程序。对于此类语言:

  1. 数据竞争 - 程序可以 线程安全.
  2. 数据竞争 - 程序从不 线程安全.