Releases: DNedic/lockfree
Releases · DNedic/lockfree
3.0.0
- Breaking:
PopOptional()has been renamed toPop()as an overload for the Queues - Breaking: mpmc::Queue now enforces a power-of-2
size. This is necessary to prevent deadlocks on index overflows. - Fixed an incorrect
our_turncheck in mpmc::Queue that caused
incorrect behavior when monotonic push/pop counters wrapped around - Fixed the push/pop count comparison condition in mpmc::Queue
- Replaced the two per-slot atomics (
push_count/pop_count) in
mpmc::Queue with a singleaccess_count, reducing memory
usage and contention per slot - Added cacheline alignment for mpmc::Queue slots when
LOCKFREE_CACHE_COHERENTis enabled, eliminating false sharing between adjacent slots - Moved
_write_wrappedand_read_wrappedflags in spsc::BipartiteBuf to share cachelines with their respective producer/consumer indexes, reducing cache contention - Fixed spsc::RingBuf
std::arrayoverloads to use.data()
instead of.begin(), returning a proper pointer rather than an iterator - Ensured PriorityQueues must have at least 2 priorities
2.0.10
- Added a missing include in the Ring Buffer causing errors for `memcpy use
2.0.9
- Fixed the initialization order in the Bipartite Buffer constructor
- Fixed missing include for the
std::pairuse in the Bipartite Buffer
2.0.8
- Added a performance optimization in the Bipartite Buffer, where the atomic invalidate index load can be avoided after writing wraps
2.0.7
- Fixed an omission where the invalidate index of the Bipartite Buffer was sharing a cacheline with wrapping flags, leading to unnecessary performance loss
2.0.6
- Added a performance optimization in the Bipartite Buffer, where the atomic read index load can be avoided after reading wraps
2.0.5
- A linear space calculation bug in the Bipartite Buffer that could cause data corruption in builds without asserts enabled was fixed
2.0.4
2.0.3
2.0.2
- Performance and code conciseness improvements in single-producer single-consumer Queue, Priority Queue and Bipartite Buffer