2
0
mirror of https://github.com/boostorg/atomic.git synced 2026-01-19 04:02:09 +00:00

29 Commits

Author SHA1 Message Date
Alexander Grund
66045fb0a6 Fix required CMake version
`cxx_std_11` requires CMake 3.8
2025-09-30 14:30:50 +02:00
Andrey Semashev
5991e99381 Added timed wait operations to lock pool.
Added a configure test for pthread_cond_clockwait presence. If it is
available, use it for timed waits with absolute timeouts on POSIX platforms.

Futex-based implementation has been improvved to use proper atomic operations
to access m_cond, which is needed to avoid races between the futex syscall and
our notifying operations. Also, check if m_cond has changed whil looping in
the waiting operations.
2025-06-08 04:37:51 +03:00
Andrey Semashev
bafa2665aa Require more C++11 support from the compiler.
We are going to use more C++11 features unconditionally, so add more
requirements in the build files. Don't straight require cxx11 in the
Jamfile as this eliminates all versions of MSVC from the builds.

Also remove older compilers that don't support enough of C++11 from CI.
2025-06-08 04:35:46 +03:00
Andrey Semashev
9ee34b2199 Define _WIN32_WINNT=0x0A00 on MinGW-w64.
Windows SDK headers in MinGW-w64 define _WIN32_WINNT to _WIN32_WINNT_WS03
by default, which prevents Boost.WinAPI from applying its own default.
This disables the WaitOnAddress API that is now required by Boost.Atomic.

Define _WIN32_WINNT to 0x0A00 ourselves on this platform (which is
the highest supported value anyway) to avoid breaking downstream libraries.

Refs https://github.com/boostorg/atomic/issues/73.
2025-05-31 02:04:34 +03:00
Andrey Semashev
411f6f65ab Removed support for Windows versions prior to Windows 10.
This makes WaitOnAddress/WakeByAddressSingle/WakeByAddressAll a mandatory
requirement. Thus, runtime detection of these APIs is now removed.

Also, linking with synchronization lib on Windows is now mandatory. The
library provides WaitOnAddress & co. which are now mandatory.
2025-05-29 18:06:10 +03:00
Andrey Semashev
b202228311 Added support for running tests in CMake.
Related to https://github.com/boostorg/atomic/issues/71.
2024-10-19 17:29:55 +03:00
Andrey Semashev
c030fbfd29 Moved Boost.Predef to public dependencies in CMakeLists.txt. 2024-08-19 01:52:36 +03:00
Andrey Semashev
65c51f5bf5 Added CMake target compile feature cxx_static_assert. 2023-10-01 17:26:33 +03:00
Andrey Semashev
8f480549ee Use C++11 static_assert.
This removes the dependency on Boost.StaticAssert.
2023-09-03 22:03:19 +03:00
Andrey Semashev
8915f67c0e Extracted Boost library include paths collection to a CMake module.
Also, save the collected paths to a global property to avoid potentially
scanning the filesystem in every library that needs these paths.
2022-02-04 14:36:39 +03:00
Andrey Semashev
805e309a29 Fixed discrepancy between always_has_native_wait_notify and caps macros.
When targeting Windows 8, the always_has_native_wait_notify static constant
would be set to false even though the native implementation of waiting
and notifying operations through WaitOnAddress would always be used.

To fix this, moved direct WaitOnAddress & co. usage to public header. This
also requires users to link with synchronization.lib, which is done
automatically on compilers that support auto-linking.

The compiled library still implements runtime detection of WaitOnAddress,
even when building for Windows 8 and later. This allows user's code to
be later compiled for Windows 7 and older and still work. This code is
not used when user's code targets Windows 8 or later.

As part of this refactoring, renamed has_synchronization test and
related CMake variable to better communicate that we're testing for
a library.
2021-10-09 23:40:42 +03:00
Andrey Semashev
40f4c95733 Generate list of Boost library includes for CMake configure checks.
In order to avoid hardcoding library dependencies recursively for the
configure checks performed in CMake build scripts, we generate the list
of all include directories. If there is a unified Boost include tree,
we can use that and avoid filesystem scanning.
2021-06-14 22:57:25 +03:00
Andrey Semashev
190cd8d10e Added setup of threading compiler flags to CMakeLists.txt.
Since Boost.Atomic may require linking with pthreads, set up
multithreading compiler flags and add a formal dependency on
the threading library in CMakeLists.txt.
2021-05-20 02:59:05 +03:00
Andrey Semashev
4b2edae1a7 Corrected CMake setup of Intel compiler flags for SSE2/SSE4.1. 2020-09-28 20:24:55 +03:00
Andrey Semashev
a40aa9ba6c Implemented SSE2 and SSE4.1 versions of address lookup algorithms. 2020-09-07 16:57:22 +03:00
Andrey Semashev
06dcdf26c6 Added a configure check to test if synchronization.lib exists.
We need to explicitly link with synchronization.lib when the
WaitOnAddress API is enabled at compile time for ARM targets. Since
this library is only available on newer Windows SDKs, we have to perform
a configure check for whether it is available.
2020-06-21 19:07:28 +03:00
Peter Dimov
58f1676cca Remove boost_install call from CMakeLists.txt 2020-06-04 15:09:26 +03:00
Andrey Semashev
d5dc8f185a Added support for build-time configuration of the lock pool size.
The user may define BOOST_ATOMIC_LOCK_POOL_SIZE_LOG2 macro to specify
binary logarithm of the size of the internal lock pool. The macro
only has effect when building Boost.Atomic.
2020-06-03 01:48:48 +03:00
Andrey Semashev
b9fadc852a Added Windows backend for waiting/notifying operations.
The backend uses runtime detection of availability of Windows API
for futex-like operations (only available since Windows 8).
2020-06-03 01:48:48 +03:00
Andrey Semashev
76e25f36a3 Added generic implementation of C++20 waiting/notifying operations.
The generic implementation is based on the lock pool. A list of condition
variables (or waiting futexes) is added per lock. Basically, the lock
pool serves as a global hash table, where each lock represents
a bucket and each wait state is an element. Every wait operation
allocates a wait state keyed on the pointer to the atomic object. Notify
operations look up the wait state by the atomic pointer and notify
the condition variable/futex. The corresponding lock needs to be acquired
to protect the wait state list during all wait/notify operations.

Backends not involving the lock pool are going to be added later.

The implementation of wait operation extends the C++20 definition in that
it returns the newly loaded value instead of void. This allows the caller
to avoid loading the value himself.

The waiting/notifying operations are not address-free. Address-free variants
will be added later.

Added tests for the new operations and refactored existing tests for atomic
operations. Added docs for the new operations.
2020-06-03 01:39:20 +03:00
Mike-Devel
34301d7faf [CMake] Add static_assert dependency
Required in detail/atomic_ref_template.hpp and detail/atomic_template.hpp.
2020-04-29 17:01:23 +02:00
Andrey Semashev
0e5e52efad Improve lock pool implementation.
Increased lock pool size to 64 entries and improve pool efficiency:

- Shift off lower pointer bits that are zero due to object alignment.
- Mix higher pointer bits to account for alignment typically imposed by
  malloc/new implementations.
- Use bit masking to select a lock from pool, given that the pool size
  is a power of 2 now.

Also, extracted (u)intptr_t definition to a common header to avoid code
duplication.
2020-03-09 20:01:49 +03:00
Peter Dimov
4d2856ca02 Normalize if statement 2019-12-28 22:05:39 +02:00
Peter Dimov
0b1d63a7c9 $<IF requires CMake 3.8 2019-12-28 21:11:35 +02:00
Peter Dimov
ac9b4520c3 Update CMakeLists.txt with install support 2019-12-28 19:59:32 +02:00
Andrey Semashev
0e810ea02f Updated license URLs to use https. 2019-01-02 15:32:10 +03:00
Mike Dev
1dd9dd831b [CMake] Add minimal cmake file
Generate cmake target that builds the library and which can
be used by other libraries to express their dependency on
this library and retrieve any configuration information
such as the include directory, binary to link to,
transitive dependencies, necessary compiler options or the
required C++ standards level.
2019-01-02 15:00:46 +03:00
Andrey Semashev
b092a25923 Revert "Added an experimental partial CMakeLists.txt for dependency tracking in CMake projects."
This reverts commit 5ad28ffd18.

Apparently, just adding include paths to user's CMake projects is not enough
for the original requester.

https://github.com/boostorg/atomic/pull/20#issuecomment-448345886
2018-12-18 23:05:41 +03:00
Andrey Semashev
5ad28ffd18 Added an experimental partial CMakeLists.txt for dependency tracking in CMake projects. 2018-12-18 19:26:35 +03:00