线程安全和数据竞争条件是否解决了同一个问题?
Are Thread Safety and Data Race condition addressing the same issue?
我很困惑。据我了解,如果一段代码在多个线程同时执行期间正常运行,则它是thread-safe。
data race 当来自不同线程的 2 条指令访问同一内存位置时发生,这些访问中至少有一个是写入,并且没有同步要求这些访问之间的任何特定顺序。
很明显,两者都与并发有关。但他们是在处理同一件事吗?
如果一个程序(或其部分)存在数据竞争,那么该程序很可能不是线程安全的.
线程安全 为使用多线程的程序声明ultimate 属性。但是检查这个属性是非常困难的任务,不能完全自动执行(因为术语 正确性 在多线程情况下形式化很差)。
数据竞争声明事件,(相对)容易自动检查,并且有这个事件有高相关性 与 线程不安全.
总结:
- 无 数据竞争 - 程序可以 线程安全.
- 数据竞争 - 程序不太可能 线程安全.
一些语言禁止编写带有数据竞争的程序。对于此类语言:
- 无 数据竞争 - 程序可以 线程安全.
- 数据竞争 - 程序从不 线程安全.
我很困惑。据我了解,如果一段代码在多个线程同时执行期间正常运行,则它是thread-safe。 data race 当来自不同线程的 2 条指令访问同一内存位置时发生,这些访问中至少有一个是写入,并且没有同步要求这些访问之间的任何特定顺序。
很明显,两者都与并发有关。但他们是在处理同一件事吗?
如果一个程序(或其部分)存在数据竞争,那么该程序很可能不是线程安全的.
线程安全 为使用多线程的程序声明ultimate 属性。但是检查这个属性是非常困难的任务,不能完全自动执行(因为术语 正确性 在多线程情况下形式化很差)。
数据竞争声明事件,(相对)容易自动检查,并且有这个事件有高相关性 与 线程不安全.
总结:
- 无 数据竞争 - 程序可以 线程安全.
- 数据竞争 - 程序不太可能 线程安全.
一些语言禁止编写带有数据竞争的程序。对于此类语言:
- 无 数据竞争 - 程序可以 线程安全.
- 数据竞争 - 程序从不 线程安全.