线程安全和数据争用条件是否解决了相同的问题



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

很明显,两者都与并发性有关。但他们在解决同一件事吗?

如果一个程序(或其部分(有一个数据争用,那么该程序很有可能不是线程安全的

线程

安全声明程序的最终属性,该程序使用多线程。但是检查此属性是非常困难的任务,并且无法完全自动执行(因为多线程情况下的术语正确性形式化得很糟糕(。

数据竞赛声明事件,这(相对(容易自动检查,并且具有此事件与线程不安全具有高度相关性

总结:

  1. 没有数据争用 - 程序可以是线程安全的
  2. 数据争用 - 程序不太可能是线程安全的

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

  1. 没有数据争用 - 程序可以是线程安全的
  2. 数据竞争 - 程序从来都不是线程安全的

最新更新