当多核或多CPU机器上的多个线程同时尝试访问堆内存中的同一区域(只读 - 没有变异)时会发生什么?例如,尝试调用静态方法(该方法不会改变任何东西)。只是尝试调用静态方法的行为可能会造成竞争或死锁条件吗?
编辑:多个线程同时进行只读内存访问是否会导致竞争条件(或任何其他问题)?
答案 0 :(得分:1)
不,多线程读数没问题。
只有在任何线程尝试写入时才可能出现竞争条件。即使在这种情况下,它可以正常工作 - 这取决于很多其他东西(cpu arch,写入类型等)
答案 1 :(得分:1)
支持在可预见的未来可能会使用的多个核心的每个平台都将支持某些版本的MESI,以保持核心内存视图的连贯性。在另一个内核上读取之后不久在一个内核上读取的内存最终将由读取它的所有内核共享,直到内核写入它(此时它将在写入它的内核上独占并且无效)在其他人身上)或者它被推出缓存。
通过读取未修改的内存,您无法引发竞争条件。除非代码被修改,否则这是您在代码本身上无法获得竞争条件的原因之一。