PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] std::atomic auch für Arrays?



HaWe
01.04.2017, 09:54
hallo,
wer weiß, ob sich std::atomic auch für Arrays verwenden lässt, nicht nur für Einzel-Variablen?

std::atomic<unsigned char> myByte;
ist klar -
- aber geht das auch:
std::atomic<unsigned char> myByteArray[64]
:?:

der Sinn ist, dass dieser atomic Array dadurch für alle Lese/Schreibzugriffe automatisch thread-safe sein soll, sowohl für Einzel-Zellen als auch für komplette Kopierbefehle wie memcpy(), sodass man dafür keine Mutexe braucht. Das vereinfacht die Sache nämlich erheblich für multiple Threads und multiple Arrays.

Mxt
01.04.2017, 15:00
Hallo,



- aber geht das auch:
std::atomic<unsigned char> myByteArray[64]

Da wären nur die Einzelelemente atomar, nicht das ganze Array.



als auch für komplette Kopierbefehle wie memcpy(), sodass man dafür keine Mutexe braucht.
Soweit ich das verstehe, sind atomare Typen nicht "automatisch geschützt" sondern nur, wenn man ihre Operationen (Zuweisung, Increment, Decrement, usw.) verwendet. Ein Zugriff über memcpy scheint mir nicht threadsicher zu sein, wenn das intern mit void* arbeitet. Aber alle Details zum C++11 Memory Model habe ich mir noch nicht angeschaut.