The barriers, provided by _acq and _rel atomics, are acquire and

release barriers, not read and write barriers.  They fence all memory
accesses from the respective side, not limited by the kind of
operation.

Reviewed by:	jhb
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
This commit is contained in:
Konstantin Belousov 2015-06-20 17:18:46 +00:00
parent e3ef9bb29e
commit 7705435606
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=284646

View File

@ -23,7 +23,7 @@
.\"
.\" $FreeBSD$
.\"
.Dd August 20, 2013
.Dd June 20, 2015
.Dt ATOMIC 9
.Os
.Sh NAME
@ -123,7 +123,9 @@ The first form just performs the operation without any explicit barriers.
The second form uses a read memory barrier, and the third variant uses a write
memory barrier.
.Pp
The second variant of each operation includes a read memory barrier.
The second variant of each operation includes an
.Em acquire
memory barrier.
This barrier ensures that the effects of this operation are completed before the
effects of any later data accesses.
As a result, the operation is said to have acquire semantics as it acquires a
@ -137,7 +139,9 @@ For example, to subtract two integers ensuring that any later writes will
happen after the subtraction is performed, use
.Fn atomic_subtract_acq_int .
.Pp
The third variant of each operation includes a write memory barrier.
The third variant of each operation includes a
.Em release
memory barrier.
This ensures that all effects of all previous data accesses are completed
before this operation takes place.
As a result, the operation is said to have release semantics as it releases