Let's say I have
std::tuple<T0, T1, T2> my_tuple{x0, x1, x2};
where T0, T1 and T2 are value types (i.e. no aliasing is possible).
Is it safe to access my_tuple's elements and mutate them concurrently from multiple threads using std::get, as long as every thread accesses a different element?
Example:
template <typename T>
void process(T&);
// ...
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();
Instinctively I would say it is safe, as my_tuple can be thought of as struct { T0 x0; T1 x1; T2 x2; };... but is it guaranteed by the standard?
Aucun commentaire:
Enregistrer un commentaire