Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::atomic_...(3)	      C++ Standard Libary	    std::atomic_...(3)

NAME
       std::atomic_... - std::atomic_...

Synopsis
	  template<		     class		   T		     >
       (since C++11)
	  bool atomic_is_lock_free( const std::shared_ptr<T>* p	);	   (1)
       (deprecated in
										C++20)
	  template<		    class		  T		     >
       (since C++11)
	  std::shared_ptr<T> atomic_load( const	std::shared_ptr<T>* p );   (2)
       (deprecated in
										C++20)
	  template< class T >
										(since
       C++11)
	  std::shared_ptr<T> atomic_load_explicit( const		   (3)
       (deprecated in
	  std::shared_ptr<T>*						    p,
       C++20)

	  std::memory_order mo );
	  template< class T >
										(since
       C++11)
	  void atomic_store( std::shared_ptr<T>* p,			   (4)
       (deprecated in
										C++20)
	  std::shared_ptr<T> r );
	  template< class T >
										(since
       C++11)
	  void atomic_store_explicit( std::shared_ptr<T>* p,		   (5)
       (deprecated in
	  std::shared_ptr<T>						    r,
       C++20)

	  std::memory_order mo);
	  template< class T >
										(since
       C++11)
	  std::shared_ptr<T> atomic_exchange( std::shared_ptr<T>* p,	   (6)
       (deprecated in
										C++20)
	  std::shared_ptr<T> r);
	  template<class T>

	  std::shared_ptr<T>   atomic_exchange_explicit(   std::shared_ptr<T>*
       (since C++11)
	  p,								   (7)
       (deprecated in
	  std::shared_ptr<T>						    r,
       C++20)

	  std::memory_order mo);
	  template< class T >
										(since
       C++11)
	  bool atomic_compare_exchange_weak( std::shared_ptr<T>* p,	   (8)
       (deprecated in
	  std::shared_ptr<T>*					     expected,
       C++20)

	  std::shared_ptr<T> desired);
	  template<class T>
										(since
       C++11)
	  bool atomic_compare_exchange_strong( std::shared_ptr<T>* p,	   (9)
       (deprecated in
	  std::shared_ptr<T>*					     expected,
       C++20)

	  std::shared_ptr<T> desired);
	  template< class T >

	  bool atomic_compare_exchange_strong_explicit(
	  std::shared_ptr<T>*						    p,
       (since C++11)
	  std::shared_ptr<T>*					     expected,
       (10) (deprecated	in
	  std::shared_ptr<T>					      desired,
       C++20)
	  std::memory_order success,

	  std::memory_order failure);
	  template< class T >

	  bool atomic_compare_exchange_weak_explicit( std::shared_ptr<T>*
	  p,
       (since C++11)
	  std::shared_ptr<T>*					     expected,
       (11) (deprecated	in
	  std::shared_ptr<T>					      desired,
       C++20)
	  std::memory_order success,

	  std::memory_order failure);

	  If multiple threads of execution access the same std::shared_ptr ob-
       ject without
	  synchronization and any of those accesses uses  a  non-const	member
       function	of
	  shared_ptr  then  a  data  race will occur unless all	such access is
       performed through
	  these	functions, which are overloads of the corresponding atomic ac-
       cess functions
	  (std::atomic_load, std::atomic_store,	etc.)

	  Note that the	control	block of a shared_ptr is thread-safe:  differ-
       ent
	  std::shared_ptr  objects  can	 be accessed using mutable operations,
       such as operator=
	  or reset, simultaneously by multiple threads,	even  when  these  in-
       stances are copies,
	  and share the	same control block internally.

	  1) Determines	whether	atomic access to the shared pointer pointed-to
       by p is
	  lock-free.
	  2) Equivalent	to atomic_load_explicit(p, std::memory_order_seq_cst)
	  3)  Returns the shared pointer pointed-to by p. As with the non-spe-
       cialized
	  std::atomic_load_explicit, mo	cannot be std::memory_order_release or
	  std::memory_order_acq_rel
	  4) Equivalent	to atomic_store_explicit(p, r, memory_order_seq_cst)
	  5) Stores the	shared pointer r in the	shared pointer pointed-to by p
       atomically,
	  effectively executing	p->swap(r). As with the	non-specialized
	  std::atomic_store_explicit, mo cannot	 be  std::memory_order_acquire
       or
	  std::memory_order_acq_rel.
	  6)   Equivalent   to	 atomic_exchange_explicit(p,   r,   memory_or-
       der_seq_cst)
	  7) Stores the	shared pointer r in the	shared pointer pointed to by p
       and returns the
	  value	formerly pointed-to by	p,  atomically.	 Effectively  executes
       p->swap(r) and
	  returns a copy of r after the	swap.
	  8)  Equivalent to atomic_compare_exchange_weak_explicit(p, expected,
       desired,
	  std::memory_order_seq_cst, std::memory_order_seq_cst)
	  9)  Equivalent  to  atomic_compare_exchange_strong_explicit(p,   ex-
       pected, desired,
	  std::memory_order_seq_cst, std::memory_order_seq_cst)
	  10)  Compares	 the  shared pointers pointed-to by p and expected. If
       they are
	  equivalent (store the	same pointer value, and	either share ownership
       of the same
	  object or are	both empty), assigns desired into *p using the	memory
       ordering
	  constraints  specified  by success and returns true. If they are not
       equivalent,
	  assigns *p into *expected  using  the	 memory	 ordering  constraints
       specified by failure
	  and returns false.
	  11) Same as 10), but may fail	spuriously.

	  All  these  functions	 invoke	 undefined  behavior  if  p  is	a null
       pointer.

Parameters
	  p, expected	       - a pointer to a	std::shared_ptr
	  r, desired	       - a std::shared_ptr
	  mo, success, failure - memory	ordering selectors of  type  std::mem-
       ory_order

Exceptions
	  These	functions do not throw exceptions.

Return value
	  1) true if atomic access is implemented using	lock-free instructions
	  2,3) A copy of the pointed-to	shared pointer.
	  4,5) (none)
	  6,7) A copy of the formerly pointed-to shared	pointer
	  8,9,10,11)  true  if the shared pointers were	equivalent and the ex-
       change was
	  performed, false otherwise.

Notes
	  These	functions are typically	implemented using mutexes, stored in a
       global hash
	  table	where the pointer value	is used	as the key.

	  To avoid data	races, once a shared pointer is	passed to any of these
       functions, it
	  cannot be accessed non-atomically. In	particular, you	cannot	deref-
       erence such a
	  shared_ptr   without	 first	atomically  loading  it	 into  another
       shared_ptr object, and
	  then dereferencing through the second	object.

	  The	Concurrency   TS   offers   atomic   smart   pointer   classes
       atomic_shared_ptr and
	  atomic_weak_ptr as a replacement for the use of these	functions.

	  These	 functions  were deprecated in favor of	the specializations of
       the
	  std::atomic	  template:	 std::atomic<std::shared_ptr>	   and
       (since C++20)
	  std::atomic<std::weak_ptr>.

Example
	   This	section	is incomplete
	   Reason: no example

	 Defect	reports

	  The following	behavior-changing defect reports were applied retroac-
       tively to
	  previously published C++ standards.

	     DR	    Applied  to	    Behavior as	published	       Correct
       behavior
	  LWG 2980 C++11      empty shared_ptrs	are never equivalent  if  they
       store the same
			      equivalent		  pointer value

See also
	  atomic_is_lock_free			   checks if the atomic	type's
       operations are
	  (C++11)				  lock-free
						  (function template)
	  atomic_store				   atomically	replaces   the
       value of	the atomic
	  atomic_store_explicit			  object with a	non-atomic ar-
       gument
	  (C++11)				  (function template)
	  (C++11)
	  atomic_load				  atomically obtains the value
       stored in an
	  atomic_load_explicit			  atomic object
	  (C++11)				  (function template)
	  (C++11)
	  atomic_exchange			    atomically	 replaces  the
       value of	the atomic
	  atomic_exchange_explicit		  object with non-atomic argu-
       ment and	returns
	  (C++11)				  the old value	of the atomic
	  (C++11)				  (function template)
	  atomic_compare_exchange_weak
	  atomic_compare_exchange_weak_explicit	   atomically	compares   the
       value of	the atomic
	  atomic_compare_exchange_strong	  object with non-atomic argu-
       ment and	performs
	  atomic_compare_exchange_strong_explicit  atomic exchange if equal or
       atomic load if
	  (C++11)				  not
	  (C++11)				  (function template)
	  (C++11)
	  (C++11)

http://cppreference.com		  2022.07.31		    std::atomic_...(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::atomic_...&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help