Ich habe eine Single-Core-CPU (ARM Cortex M3, 32bit) mit zwei Threads. Unter der Annahme, die folgende Situation:Ist eine Variable auf einer Single-Core-CPU atomar?
// Thread 1:
int16_t a = 1;
double b = 1.0;
// Do some other fancy stuff including starting Thread 2
for (;;) {std::cout << a << "," <<b;}
// Thread 2:
a = 2;
b = 2.0;
I kann folgende Ausgänge verarbeiten:
- 1,1
- 1,2
- 2,1
- 2,2
Kann ich sicher sein, dass die Ausgabe immer eine davon (1/2) ist, ohnezu verwendenoder andere Schließmechanismen? Und genauer, ist dieser Compiler abhängig? Und ist das Verhalten für int16
und double
unterschiedlich?
Verwenden Sie 'std :: atomic' für _atomic_ Zugriff. –
Ihr Code hat, vollständig portabel und unabhängig vom Compiler, * undefiniertes Verhalten *. Alle Implementierungen sind vollkommen frei, um zu tun, was sie wollen. –
@ πάνταῥεῖ. Leider habe ich aufgrund von Compiler-Einschränkungen keinen Zugriff darauf (z. B. kein C++ 11). Aber sonst wäre das der richtige Weg. –