代码之家  ›  专栏  ›  技术社区  ›  Oliv

如果两个基准之间的不变量必须在所有线程上保持不变,它是否会强制这些基准上的读/写处于临界段?

  •  3
  • Oliv  · 技术社区  · 7 年前

    我试图建立一个 两个原子计数器之间的不变量 在一个线程中,同时确保在不使用互斥锁的情况下在另一个线程上读取期间保持该不变量。

    不使用锁定策略就可以在线程之间共享不变量吗?


    编辑:项不变量可能不够充分。

    假设我有两个变量 b ,在程序执行的某个点上,线程是一个集合 由A存储,然后加载 b ,的加载值 是由存储的值,而不是稍后存储在中的值 b

    1 回复  |  直到 7 年前
        1
  •  4
  •   gsamaras a Data Head    7 年前

    a b .

    b 当不变量被破坏时

    可能是X现在写入的值,也可能是上一个值。相同代表 b

    data races .


    here

    假设线程X删除了列表中的一个节点,线程Y试图在该点读取,这可能会导致问题,因为有可能X要删除的节点的上一个和下一个节点的指针尚未设置(因此,在线程Y尝试读取列表时,不变量被破坏)。