SDL3pp
A slim C++ wrapper for SDL3
|
A type representing an atomic integer value. More...
Public Member Functions | |
constexpr | AtomicInt (int value) |
Wraps AtomicInt. More... | |
AtomicInt (const AtomicInt &value)=delete | |
AtomicInt & | operator= (const AtomicInt &value)=delete |
bool | CompareAndSwap (int oldval, int newval) |
Set an atomic variable to a new value if it is currently an old value. More... | |
int | Set (int v) |
Set an atomic variable to a value. More... | |
int | Get () |
Get the value of an atomic variable. More... | |
int | Add (int v) |
Add to an atomic variable. More... | |
bool | AtomicIncRef () |
Increment an atomic variable used as a reference count. More... | |
bool | AtomicDecRef () |
Decrement an atomic variable used as a reference count. More... | |
This can be used to manage a value that is synchronized across multiple CPUs without a race condition; when an app sets a value with AtomicInt.Set all other threads, regardless of the CPU it is running on, will see that value when retrieved with AtomicInt.Get, regardless of CPU caches, etc.
This is also useful for atomic compare-and-swap operations: a thread can change the value as long as its current value matches expectations. When done in a loop, one can guarantee data consistency across threads without a lock (but the usual warnings apply: if you don't know what you're doing, or you don't do it carefully, you can confidently cause any number of disasters with this, so in most cases, you should use a mutex instead of this!).
This is a struct so people don't accidentally use numeric operations on it directly. You have to use SDL atomic functions.
|
inlineconstexpr |
value | the value for value. |