Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
local clone.
Page wiki
View or edit the community-maintained wiki page associated with this page.
core.atomic
License:
Authors:
Sean Kelly, Alex Rønne Petersen
Source: core/atomic.d
- nothrow HeadUnshared!T atomicOp(string op, T, V1)(ref shared T val, V1 mod) if (__traits(compiles, mixin("*cast(T*)&val" ~ op ~ "mod")));
- Performs the binary operation 'op' on val using 'mod' as the modifier.Parameters:
T val The target variable. V1 mod The modifier to apply. Returns:The result of the operation. - nothrow bool cas(T, V1, V2)(shared(T)* here, const V1 ifThis, const V2 writeThis) if (!is(T == class) && !is(T U : U*) && __traits(compiles, ()
{
*here = writeThis;
}
));
nothrow bool cas(T, V1, V2)(shared(T)* here, const shared(V1) ifThis, shared(V2) writeThis) if (is(T == class) && __traits(compiles, () { *here = writeThis; } ));
nothrow bool cas(T, V1, V2)(shared(T)* here, const shared(V1)* ifThis, shared(V2)* writeThis) if (is(T U : U*) && __traits(compiles, () { *here = writeThis; } )); - Stores 'writeThis' to the memory referenced by 'here' if the value referenced by 'here' is equal to 'ifThis'. This operation is both lock-free and atomic.Parameters:
shared(T)* here The address of the destination variable. V2 writeThis The value to store. V1 ifThis The comparison value. Returns:true if the store occurred, false if not. - nothrow HeadUnshared!T atomicLoad(MemoryOrder ms = MemoryOrder.seq, T)(ref const shared T val);
- Loads 'val' from memory and returns it. The memory barrier specified by 'ms' is applied to the operation, which is fully sequenced by default.Parameters:
T val The target variable. Returns:The value of 'val'. - nothrow void atomicStore(MemoryOrder ms = MemoryOrder.seq, T, V1)(ref shared T val, V1 newval) if (__traits(compiles, () { val = newval; } ));
- Writes 'newval' into 'val'. The memory barrier specified by 'ms' is applied to the operation, which is fully sequenced by default.Parameters:
T val The target variable. V1 newval The value to store. - enum MemoryOrder: int;
- Specifies the memory ordering semantics of an atomic operation.
- nothrow void atomicFence();
- Inserts a full load/store memory fence (on platforms that need it). This ensures that all loads and stores before a call to this function are executed before any loads and stores after the call.