Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
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
a local clone.
core.atomic
The
atomic module provides basic support for lock-free
concurrent programming.
License:
Authors:
Sean Kelly, Alex Rønne Petersen
Source core/atomic.d
- pure nothrow @nogc @safe TailShared!T
atomicOp(string op, T, V1)(ref shared Tval, V1mod)
if (__traits(compiles, mixin("*cast(T*)&val" ~ op ~ "mod"))); - Performs the binary operation 'op' on
valusing 'mod' as the modifier.Parameters:T valThe target variable. V1 modThe modifier to apply. Returns:The result of the operation. - pure nothrow @nogc @safe bool
cas(T, V1, V2)(shared(T)*here, const V1ifThis, V2writeThis)
if (!is(T == class) && !is(T U : U*) && __traits(compiles, () { *here=writeThis; } ));
pure nothrow @nogc @safe boolcas(T, V1, V2)(shared(T)*here, const shared(V1)ifThis, shared(V2)writeThis)
if (is(T == class) && __traits(compiles, () { *here=writeThis; } ));
pure nothrow @nogc @safe boolcas(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)* hereThe address of the destination variable. V2 writeThisThe value to store. V1 ifThisThe comparison value. Returns:trueif the store occurred,falseif not. - pure nothrow @nogc @safe TailShared!T
atomicLoad(MemoryOrder ms = MemoryOrder.seq, T)(ref const shared Tval); - Loads '
val' from memory and returns it. The memory barrier specified by 'ms' is applied to the operation, which is fully sequenced by default. Valid memory orders are MemoryOrder.raw, MemoryOrder.acq, and MemoryOrder.seq.Parameters:T valThe target variable. Returns:The value of 'val'. - pure nothrow @nogc @safe void
atomicStore(MemoryOrder ms = MemoryOrder.seq, T, V1)(ref shared Tval, V1newval)
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. Valid memory orders are MemoryOrder.raw, MemoryOrder.rel, and MemoryOrder.seq.Parameters:T valThe target variable. V1 newvalThe value to store. - enum
MemoryOrder: int; - Specifies the memory ordering semantics of an atomic operation.
raw- Not sequenced.
acq- Hoist-load + hoist-store barrier.
rel- Sink-load + sink-store barrier.
seq- Fully sequenced (acquire + release).
- nothrow @nogc 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.
Copyright © 1999-2018 by the D Language Foundation | Page generated by
Ddoc on (no date time)