1)我有一个本地java函数,它传递几个参数,它的实现是一个本地C++构造函数来创建一个对象并返回一个从指针到对象的long。该对象的构造成员实际上是不可变的。然后,C++ 对象可以根据其构造状态进行工作。
2) 获取函数调用结果的 java 代码在某处安全地发布指针的加长版本(没有互斥体)并更改 volatile 变量以希望将本机 C++ 对象中的内存更改发布到其他线程
现在另一个线程读取 2) 的 volatile 变量,然后获取已发布的 long,并调用另一个本机函数,该函数访问 C++ 内存空间中的有效不可变对象以完成一些工作。
问题:由于 Java 内存模型对 volatile 和栅栏的保证,是否保证其他线程可以看到完全构造的本机对象?我敢打赌,在某些平台上答案是肯定的,但我看到不同的芯片使用栅栏以不同的方式工作,并且想知道所有可以使用 java 的平台。