Скажем, у меня
std::tuple<T0, T1, T2> my_tuple{x0, x1, x2};
где T0
, T1
и T2
являются типами значений (т.е. невозможно использовать псевдонимы).
Безопасно ли доступ к элементам my_tuple
и мутировать их одновременно из нескольких потоков с помощью std::get
, если каждый поток обращается к другому элементу?
Пример:
template <typename T>
void process(T& x) { /* mutate `x` */ }
// ...
std::thread{[&]{ process(std::get<0>(my_tuple)); }}.detach();
std::thread{[&]{ process(std::get<1>(my_tuple)); }}.detach();
std::thread{[&]{ process(std::get<2>(my_tuple)); }}.detach();
Инстинктивно я бы сказал, что это безопасно, поскольку my_tuple
можно рассматривать как struct { T0 x0; T1 x1; T2 x2; };
... но гарантируется ли это стандартом?