Насколько я понимаю, общее правило для типов в стандартной библиотеке C ++, что использование их одновременно без блокировки в порядке, пока все одновременные операции считываются
Я знаю «Это внутренне, std :: exception_ptr реализовано с помощью какого -то ссылочного подсчета, поэтому копирование его фактически включает в себя какую -то запись (ы), это проблема для кода, такого как следующее?
// Global scope
std::exception_ptr GetSharedException() noexcept
{
try
{
static const std::exception_ptr result(std::make_exception_ptr(CreateException()))
return result;
}
catch (...)
{
return std::current_exception();
}
}
// Some function which can be running on multiple threads concurrently
void foo() noexcept
{
// Do stuff
if (bar())
consume(GetSharedException())
// Do more stuff
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... -o-locking