请参阅以下代码:
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 / hotspot / src / share / vm / memory / metaspace.cpp第86行。
答案 0 :(得分:0)
我在这里回答我自己的问题,我知道为什么需要这个功能。
这只是因为'volatile'保留关键字,它提供了内存排序,因为p可能被多个线程或CPU访问。