如果我在一个线程中构造一个对象,然后将一个引用/指针传递给另一个线程,那么该线程的其他线程在没有显式锁定/内存屏障的情况下访问该对象是不安全的吗?
// thread 1
Obj obj;
anyLeagalTransferDevice.Send(&obj);
while(1); // never let obj go out of scope
// thread 2
anyLeagalTransferDevice.Get()->SomeFn();
Run Code Online (Sandbox Code Playgroud)
或者:是否有任何合法的方法在线程之间传递数据,这些方法不会强制执行与线程触及的其他内容相关的内存排序?从硬件的角度来看,我认为没有任何理由不可能.
澄清; 问题是关于缓存一致性,内存排序等等.在线程2的内存视图包含构造中涉及的写入之前,线程2可以获取并使用指针obj吗?错过引用Alexandrescu(?)"一个恶意的CPU设计师和编译器编写者是否可以共同构建一个标准的符合系统来实现这一目标?"