Пользователь
поэтому результат создания объекта будет закомичен в памяти до того, как произойдет проверка указателя.
Чем поможет вынос присвоения за unlock? Для этого необходим memory-barrier каковым не обязан являться unlock (говоря про pthread).