2015-11-01 65 views
0

多核或多CPU机器上的多个线程试图同时访问堆内存中的同一区域(只读 - 无变异)时会发生什么?例如,试图调用一个静态方法(该方法不会改变任何东西)。试图调用静态方法的行为是否可能会导致竞争或死锁状况?多线程堆内存访问

编辑:多线程在同一时间只读内存访问会导致竞争条件(或任何其他问题)?

+0

该方法突变什么? – dm03514

+0

这个问题太广泛了。答案是肯定的,它可能会造成竞争条件。这真的取决于该方法在做什么。 – Robinson

回答

1

不,多线程读数没有问题。

只有在任何线程尝试写入时才有可能出现竞争条件。即使在这种情况下,它可以正常工作 - 这取决于很多其他的东西(CPU拱门,写入类型等)

1

支持多个核心的每个平台,你可能会用于可预见的未来将支持某些版本的MESI,保持核心的内存视图一致。在另一个内核上读取内容后,在另一个内核上读取的内存将被读取的所有内核共享,直到内核写入内核(此时它将在写入内核的内核上是独占的,并且无效在其他人)或它被推出缓存。

通过读取未被修改的内存,不能导致竞争条件。这是除非代码被修改之外,您不能在代码本身出现竞争条件的原因之一。