Ich möchte, dies zu tun:Können zwei std :: atomics Teil einer Union sein?
union {
std::atomic<uint128_t> u128;
struct {
std::atomic<uint64_t> u64_1;
std::atomic<uint64_t> u64_2;
};
};
Mehrere Threads gelesen und beide Teile der Union schreiben.
Ist es sicher?
Edit: Ich benutze Linux, x86_64, klirren 3.3
Edit2: Ich möchte in der Lage sein, zu erhöhen und verringern u64_1, lesen u64_2 und schreiben U128 (compare_exchange)
Edit3 : Was ist, wenn ich atomic builtin functions verwende? Die Gewerkschaft wird wie folgt aussehen:
union {
uint128_t u128;
struct {
uint64_t u64_1;
uint64_t u64_2;
};
};
u64_1 zur ersten Hälfte des U128 abbildet und u64_2 wird auf die zweite Hälfte der Karte.
Unterstützt Ihre Plattform 128bit atomar schreibt nativ? –
Aufgrund von Aliasing-Einschränkungen (mindestens) können Sie nicht in u128 schreiben und von u64_1 und u64_2 lesen oder umgekehrt. Auch C++, auch C++ 11, hat keine anonymen Strukturen. – bames53
Sieht aus wie ein BFG-3000 mit einem eingebauten Fußdetektor für mich ... – twalberg