【问题标题】:False sharing and adding an element to a Queue错误共享并将元素添加到队列
【发布时间】:2020-05-10 05:27:54
【问题描述】:

给定两个线程 ab 从共享队列中读取。如果a 修改了队列并添加了一个元素,是否意味着当b 出现时,它会因为队列已被修改而导致缓存未命中?

例如,在队列末尾更改某些内容(猜测它是一个内存块)会导致缓存行无效并强制它们重新读取吗?

提前致谢。

【问题讨论】:

  • shared queue 是什么意思?你在使用某种 Java 阻塞队列吗?感觉您的问题与 Java 无关,而且更底层,因为您谈论的是无效缓存行和缓存未命中。
  • 我认为 JLS 引入了“happen-before”事件,以便更清楚地了解缓存未命中时会发生什么,但我不能说更多......

标签: java multithreading architecture false-sharing


【解决方案1】:

当两个线程对共享同一缓存行的两个不同变量进行操作时,就会发生错误共享。

因此,您的队列中是否发生错误共享在很大程度上取决于具体的实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多