Из этого вопроса и связанных с этим вопросом:
Если я построю объект в одном потоке, а затем передаю ссылку/указатель на него в другой поток, не будет ли он потоком небезопасным для этого другого потока для доступа к объекту без явных блокировок/барьеров памяти?
// thread 1
Obj obj;
anyLeagalTransferDevice.Send(&obj);
while(1); // never let obj go out of scope
// thread 2
anyLeagalTransferDevice.Get()->SomeFn();
Альтернативно: существует ли какой-либо законный способ передачи данных между потоками, которые не обеспечивают упорядочение памяти в отношении всего остального, затронутого нитью? С аппаратной точки зрения я не вижу причин, по которым это невозможно.
Прояснить; вопрос в том, что касается согласованности кэша, упорядоченности памяти и много чего. Может ли Thread 2 получить и использовать указатель перед представлением памяти 2-го уровня, включая записи, связанные с построением obj
? Пропустить цитату Alexandrescu (?) "Мог ли разработчик вредоносного процессора и писатель компилятора построить стандартную систему соответствия, которая сделает этот разрыв?"