Являются ли конструкторы потокобезопасными в C++ и/или C++11?

Получено из этого вопроса и , связанных с этим вопросом:

Если я создаю объект в одном потоке и , затем передаю ссылку/указатель на него в другой поток, поток un -безопасен для этого другого потока для доступа к объекту без явных блокировок/барьеров памяти -?

// thread 1
Obj obj;

anyLeagalTransferDevice.Send(&obj);
while(1); // never let obj go out of scope

// thread 2
anyLeagalTransferDevice.Get()->SomeFn();

В качестве альтернативы :существует ли какой-либо законный способ передачи данных между потоками, который не обеспечивает упорядочение памяти в отношении всего еще , к которому прикоснулся поток? С аппаратной точки зрения я не вижу причин, по которым это невозможно.

Чтобы прояснить; вопрос касается когерентности кеша, упорядочения памяти и многого другого. Может ли поток 2 получить и использовать указатель до того, как представление памяти потоком 2 включает операции записи, связанные с построением obj?Пропустить -цитату Александреску (?)«Может ли злонамеренный разработчик ЦП и составитель компилятора вступить в сговор для создания системы, соответствующей стандарту, которая нарушит это?»

22
задан Community 23 May 2017 в 11:45
поделиться