为什么需要load_ptr_acquire?

问题描述:

请看下面的代码:为什么需要load_ptr_acquire?

intptr_t load_ptr_acquire(volatile intptr_t* p) { return *p; } 

它是无用的? 如果使用该功能,因为这:

intptr_t p = some value; 
int value = (int)load_ptr_acquire(&p); 

为什么需要这种功能,而不是直接写:

int value = (int)p; 

我想知道这一招。

上面的代码是从jdk8/OpenJDK的/热点/ src目录/股/ VM /内存/ metaspace.cpp线86

+0

'volatile'是什么意思? – doctorlove 2014-09-22 08:42:29

+0

我不确定这个Hotspot应该被认为是C++编码的杰作。仔细阅读。 – 2014-09-22 08:44:01

我在这里回答我的问题,我知道为什么需要该功能。

这只是因为'volatile'保留关键字,它提供了内存排序,因为p可以被多个线程或CPU访问。