- Fixed the initialization order in the Bipartite Buffer constructor
- Fixed missing include for the
std::pair
use in the Bipartite Buffer
- Added a performance optimization in the Bipartite Buffer, where the atomic invalidate index load can be avoided after writing wraps
- Fixed an omission where the invalidate index of the Bipartite Buffer was sharing a cacheline with wrapping flags, leading to unnecessary performance loss
- Added a performance optimization in the Bipartite Buffer, where the atomic read index load can be avoided after reading wraps
- A linear space calculation bug in the Bipartite Buffer that could cause data corruption in builds without asserts enabled was fixed
- Added the ability to configure the library through CMake
- Fixed MSVC C++ language standard detection
- Performance and code conciseness improvements in single-producer single-consumer Queue, Priority Queue and Bipartite Buffer
- Added asserts in the Bipartite Buffer to protect against buffer overruns
- Various README improvements
- Added multi-producer multi-consumer Queue and Priority Queue data structures
- Important: SPSC data structures have been moved to the
spsc
namespace - Important: Cacheline padding is now the default behaviour as analytics showed most people are using the library on cache coherent systems, for embedded systems it is necessary to set
LOCKFREE_CACHE_COHERENT
tofalse
to avoid wasting memory
- Added the Priority Queue data structure
- Made all class members accidentally public private
- Small doc fixes
- Added static asserts to verify the template type arguments are trivial types
- Added static asserts to verify the minimum size
- Moved all the
relaxed
atomic loads before theacquire
loads, potentially increasing performance, there was no need for these to be inside fences. - Updated the documentation in various places
- Initial release