我很困惑。据我了解,如果一段代码在多个线程同时执行期间正常运行,那么它就是线程安全的。当来自不同线程的 2 条指令访问同一内存位置时,就会发生数据竞争,其中至少有一个访问是写入,并且没有同步强制要求这些访问之间的任何特定顺序。
很明显,两者都与并发性有关。但他们在解决同一件事吗?
如果一个程序(或其部分(有一个数据争用,那么该程序很有可能不是线程安全的。
线程安全声明程序的最终属性,该程序使用多线程。但是检查此属性是非常困难的任务,并且无法完全自动执行(因为多线程情况下的术语正确性形式化得很糟糕(。
数据竞赛声明事件,这(相对(容易自动检查,并且具有此事件与线程不安全具有高度相关性。
总结:
- 没有数据争用 - 程序可以是线程安全的。
- 数据争用 - 程序不太可能是线程安全的。
某些语言禁止编写带有数据竞争的程序。对于此类语言:
- 没有数据争用 - 程序可以是线程安全的。
- 数据竞争 - 程序从来都不是线程安全的。