¿Los constructores son seguros para subprocesos en C ++ y / o C ++ 11?
Derivado de esta pregunta yrelacionado con esta pregunta:
Si construyo un objeto en un hilo yentonces transmítale una referencia / puntero a otro hilo, ¿es un hilo no seguro para que otro hilo acceda al objeto sin un bloqueo explícito / barreras de memoria?
<code>// thread 1 Obj obj; anyLeagalTransferDevice.Send(&obj); while(1); // never let obj go out of scope // thread 2 anyLeagalTransferDevice.Get()->SomeFn(); </code>
Alternativamente: ¿existe alguna forma legal de transmitir datos entre subprocesos que no imponga el orden de la memoria con respecto a todo?más el hilo ha tocado? Desde el punto de vista del hardware, no veo ninguna razón por la que no debería ser posible.
Para aclarar; La pregunta es con respecto a la coherencia del caché, el orden de la memoria y otras cosas. ¿Puede el subproceso 2 obtener y usar el puntero antes de que la vista de la memoria del subproceso 2 incluya las escrituras involucradas en la construcción?obj
? Para dejar de citar a Alexandrescu (?)"¿Podrían un diseñador malicioso de CPU y un escritor de compilación colaborar para construir un sistema de conformidad estándar que haga esa ruptura?"