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 HeadUnshared!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
val
using 'mod
' as the modifier.Parameters:T val
The target variable. V1 mod
The 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)* 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. - pure nothrow @nogc @safe HeadUnshared!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 val
The 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 val
The target variable. V1 newval
The 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-2017 by the D Language Foundation | Page generated by
Ddoc on Wed Jul 19 16:13:51 2017