atomic_fetch_sub, atomic_fetch_sub_explicit

< c‎ | atomic
Revision as of 23:29, 2 November 2012 by P12bot (Talk | contribs)

Template:ddcl list begin <tr class="t-dsc-header">

Defined in header <stdatomic.h>

<td></td> <td></td> <tr class="t-dcl-sep"><td></td><td></td><td></td></tr>

<tr class="t-dcl ">

<td >
C atomic_fetch_sub( volatile A* obj, M arg );

<td > (1) </td> <td > (since C11) </td> </tr> <tr class="t-dcl-sep"><td></td><td></td><td></td></tr>

<tr class="t-dcl ">

<td >
C atomic_fetch_sub_explicit( volatile A* obj, M arg, memory_order order );

<td > (2) </td> <td > (since C11) </td> </tr> Template:ddcl list end

Atomically replaces the value pointed by obj with the result of subtraction of arg from the old value of obj, and returns the value obj held previously. The operation is read-modify-write operation. The first version orders memory accesses according to memory_order_seq_cst, the second version orders memory accesses according to order.

This is a generic function defined for all atomic object types. A is the type of an atomic object, M is either the non-atomic type corresponding to A if A is atomic integer type, or ptrdiff_t if A is atomic pointer type.

For signed integer types, arithmetic is defined to use two’s complement representation. There are no undefined results. For pointer types, the result may be an undefined address, but the operations otherwise have no undefined behavior.


obj - pointer to the atomic object to modify
arg - the value to subtract from the value stored in the atomic object
order - the memory synchronization ordering for this operation: all values are permitted

Return value

The value held previously be the atomic object pointed to by obj.

See also

Template:c/atomic/dcl list atomic fetch add
C++ documentation for atomic_fetch_sub, atomic_fetch_sub_explicit