 b6cbf7203b
			
		
	
	
		b6cbf7203b
		
	
	
	
	
		
			
			This patch imports the unmodified current version of NetBSD libc. The NetBSD includes are in /nbsd_include, while the libc code itself is split between lib/nbsd_libc and common/lib/libc.
		
			
				
	
	
		
			130 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: atomic_ops.3,v 1.5 2010/04/14 08:49:49 jruoho Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 2007, 2008 The NetBSD Foundation, Inc.
 | |
| .\" All rights reserved.
 | |
| .\"
 | |
| .\" This code is derived from software contributed to The NetBSD Foundation
 | |
| .\" by Jason R. Thorpe.
 | |
| .\"
 | |
| .\" Redistribution and use in source and binary forms, with or without
 | |
| .\" modification, are permitted provided that the following conditions
 | |
| .\" are met:
 | |
| .\" 1. Redistributions of source code must retain the above copyright
 | |
| .\" notice, this list of conditions and the following disclaimer.
 | |
| .\" 2. Redistributions in binary form must reproduce the above copyright
 | |
| .\" notice, this list of conditions and the following disclaimer in the
 | |
| .\" documentation and/or other materials provided with the distribution.
 | |
| .\"
 | |
| .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 | |
| .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 | |
| .\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | |
| .\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 | |
| .\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | |
| .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | |
| .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | |
| .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | |
| .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | |
| .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | |
| .\" POSSIBILITY OF SUCH DAMAGE.
 | |
| .\"
 | |
| .Dd April 14, 2010
 | |
| .Dt ATOMIC_OPS 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm atomic_ops
 | |
| .Nd atomic memory operations
 | |
| .\" .Sh LIBRARY
 | |
| .\" .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In sys/atomic.h
 | |
| .Sh DESCRIPTION
 | |
| The
 | |
| .Nm atomic_ops
 | |
| family of functions provide atomic memory operations.
 | |
| There are 7 classes of atomic memory operations available:
 | |
| .Pp
 | |
| .Bl -tag -width "atomic_swap(3)" -offset indent
 | |
| .It Xr atomic_add 3
 | |
| These functions perform atomic addition.
 | |
| .It Xr atomic_and 3
 | |
| These functions perform atomic logical
 | |
| .Dq and .
 | |
| .It Xr atomic_cas 3
 | |
| These functions perform atomic compare-and-swap.
 | |
| .It Xr atomic_dec 3
 | |
| These functions perform atomic decrement.
 | |
| .It Xr atomic_inc 3
 | |
| These functions perform atomic increment.
 | |
| .It Xr atomic_or 3
 | |
| These functions perform atomic logical
 | |
| .Dq or .
 | |
| .It Xr atomic_swap 3
 | |
| These functions perform atomic swap.
 | |
| .El
 | |
| .Ss Synchronization Mechanisms
 | |
| Where the architecture does not provide hardware support for atomic compare
 | |
| and swap (CAS), atomicity is provided by a restartable sequence or by a
 | |
| spinlock.
 | |
| The chosen method is not ordinarily distinguishable by or visible to users
 | |
| of the interface.
 | |
| The following architectures can be assumed to provide CAS in hardware:
 | |
| alpha, amd64, i386, powerpc, powerpc64, sparc64.
 | |
| .Ss Scope and Restrictions
 | |
| If hardware CAS is available, the atomic operations are globally atomic:
 | |
| operations within a memory region shared between processes are
 | |
| guaranteed to be performed atomically.
 | |
| If hardware CAS is not available, it may only be assumed that the operations
 | |
| are atomic with respect to threads in the same process.
 | |
| Additionally, if hardware CAS is not available, the atomic operations must
 | |
| not be used within a signal handler.
 | |
| .Pp
 | |
| Users of atomic memory operations should not make assumptions about how
 | |
| the memory access is performed
 | |
| .Pq specifically, the width of the memory access .
 | |
| For this reason, applications making use of atomic memory operations should
 | |
| limit their use to regular memory.
 | |
| The results of using atomic memory operations on anything other than
 | |
| regular memory are undefined.
 | |
| .Pp
 | |
| Users of atomic memory operations should take care to modify any given
 | |
| memory location either entirely with atomic operations or entirely with
 | |
| some other synchronization mechanism.
 | |
| Intermixing of atomic operations with other synchronization mechanisms
 | |
| for the same memory location results in undefined behavior.
 | |
| .Ss Visibility and Ordering of Memory Accesses
 | |
| If hardware CAS is available, stores to the target memory location by an
 | |
| atomic operation will reach global visibility before the operation
 | |
| completes.
 | |
| If hardware CAS is not available, the store may not reach global visibility
 | |
| until some time after the atomic operation has completed.
 | |
| However, in all cases a subsequent atomic operation on the same memory cell
 | |
| will be delayed until the result of any preceeding operation has reached
 | |
| global visibility.
 | |
| .Pp
 | |
| Atomic operations are strongly ordered with respect to each other.
 | |
| The global visibility of other loads and stores before and after an atomic
 | |
| operation is undefined.
 | |
| Applications that require synchronization of loads and stores with respect
 | |
| to an atomic operation must use memory barriers.
 | |
| See
 | |
| .Xr membar_ops 3 .
 | |
| .Ss Performance
 | |
| Because atomic memory operations require expensive synchronization at the
 | |
| hardware level, applications should take care to minimize their use.
 | |
| In certain cases, it may be more appropriate to use a mutex, especially
 | |
| if more than one memory location will be modified.
 | |
| .Sh SEE ALSO
 | |
| .Xr atomic_add 3 ,
 | |
| .Xr atomic_and 3 ,
 | |
| .Xr atomic_cas 3 ,
 | |
| .Xr atomic_dec 3 ,
 | |
| .Xr atomic_inc 3 ,
 | |
| .Xr atomic_or 3 ,
 | |
| .Xr atomic_swap 3 ,
 | |
| .Xr membar_ops 3
 | |
| .Sh HISTORY
 | |
| The
 | |
| .Nm atomic_ops
 | |
| functions first appeared in
 | |
| .Nx 5.0 .
 |