GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::atomic_is_lock_free,ATOMIC_xxx_LOCK_FREE(3) C++ Standard Libary std::atomic_is_lock_free,ATOMIC_xxx_LOCK_FREE(3)

std::atomic_is_lock_free,ATOMIC_xxx_LOCK_FREE - std::atomic_is_lock_free,ATOMIC_xxx_LOCK_FREE


Defined in header <atomic>
template< class T >
bool atomic_is_lock_free( const volatile
std::atomic<T>* obj ) noexcept;
template< class T >
bool atomic_is_lock_free( const std::atomic<T>*
obj ) noexcept;
#define ATOMIC_BOOL_LOCK_FREE /* unspecified */


#define ATOMIC_CHAR_LOCK_FREE /* unspecified */
#define ATOMIC_CHAR16_T_LOCK_FREE /* unspecified
*/
#define ATOMIC_CHAR32_T_LOCK_FREE /* unspecified (1) (since C++11)
*/
#define ATOMIC_WCHAR_T_LOCK_FREE /* unspecified (2) (since C++11)
*/
#define ATOMIC_SHORT_LOCK_FREE /* unspecified */
#define ATOMIC_INT_LOCK_FREE /* unspecified */
#define ATOMIC_LONG_LOCK_FREE /* unspecified */
#define ATOMIC_LLONG_LOCK_FREE /* unspecified */


#define ATOMIC_POINTER_LOCK_FREE /* unspecified
*/
#define ATOMIC_CHAR8_T_LOCK_FREE /* unspecified (3) (since C++20)
*/


1) Determines if the atomic object pointed to by obj is implemented lock-free, as if
by calling obj->is_lock_free(). In any given program execution, the result of the
lock-free query is the same for all atomic objects of the same type.
2,3) Expands to an integer constant expression with value


* 0 for the built-in atomic types that are never lock-free
* 1 for the built-in atomic types that are sometimes lock-free
* 2 for the built-in atomic types that are always lock-free.


obj - pointer to the atomic object to examine


true if *obj is a lock-free atomic, false otherwise.


All atomic types except for std::atomic_flag may be implemented using mutexes or
other locking operations, rather than using the lock-free atomic CPU instructions.
Atomic types are also allowed to be sometimes lock-free: for example, if only some
subarchitectures support lock-free atomic access for a given type (such as the
CMPXCHG16B instruction on x86-64), whether atomics are lock-free may not be known
until runtime.


The C++ standard recommends (but does not require) that lock-free atomic operations
are also address-free, that is, suitable for communication between processes using
shared memory.

// Run this code


#include <iostream>
#include <utility>
#include <atomic>


struct A { int a[100]; };
struct B { int x, y; };
int main()
{
std::atomic<A> a;
std::atomic<B> b;
std::cout << std::boolalpha
<< "std::atomic<A> is lock free? "
<< std::atomic_is_lock_free(&a) << '\n'
<< "std::atomic<B> is lock free? "
<< std::atomic_is_lock_free(&b) << '\n';
}


std::atomic<A> is lock free? false
std::atomic<B> is lock free? true


Defect reports


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


DR Applied to Behavior as published Correct behavior
atomic_is_lock_free was specified via
LWG 3249 C++11 pointers, which was specified via atomic
ambiguous and might accept invalid pointer objects
values


is_lock_free checks if the atomic object is lock-free
(public member function of std::atomic<T>)
specializes atomic operations for
std::atomic_is_lock_free(std::shared_ptr) std::shared_ptr
(function template)
atomic_flag the lock-free boolean atomic type
(C++11) (class)
indicates that the type is always
is_always_lock_free lock-free
[static] (C++17) (public static member constant of
std::atomic<T>)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.