Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
move constructorИсточник
The constructed object acquires the shared state of x (if any).
x is left with no shared state (it is no longer valid).
MutexLocker lock(mutex); в скоупах.struct c {int x};
AnLock<c> v;
v->x = foo(v->x); // deadlock or not atomic depending on compiler
Вот вам еще одна ошибка, которая невозможна при явном локеТ.е. так нельзя написать:
v.lock()->x = foo(f.lock()->x)
? v.lock()->x = foo(f.lock()->x)
надо быть не очень хорошим программистом, а для того, чтобы v->x = foo(v->x)
всего лишь не очень внимательным.There should be one-- and preferably only one --obvious way to do it
template<typename ...Args> SharedResource(Args ...args) : m_resource(args...) { }
template<typename ...Args> SharedResource(Args&&... args) : m_resource(std::forward<Args>(args)...) { }
Мьютексы в стиле Rust для C++