#lock-free #bag #atomic #safe-wrapper

orx-pinned-concurrent-col

A core data structure with a focus to enable high performance, possibly lock-free, concurrent collections using a PinnedVec as the underlying storage

2 stable releases

1.1.0 Apr 12, 2024
1.0.0 Apr 12, 2024

#902 in Concurrency

Download history 268/week @ 2024-04-07 29/week @ 2024-04-14

297 downloads per month
Used in 4 crates

MIT license

40KB
530 lines

orx-pinned-concurrent-col

orx-pinned-concurrent-col crate orx-pinned-concurrent-col documentation

A core data structure with a focus to enable high performance, possibly lock-free, concurrent collections using a PinnedVec as the underlying storage.

Pinned vectors grow while keeping the already pushed elements pinned to their memory locations. This allows the following concurrency model.

  • Writing to the collection does not block. Multiple writes can happen concurrently.
    • However, PinnedConcurrentCol itself does not provide guarantees for race-free writing; and hence, the write methods are marked unsafe.
    • It is the responsibility of the wrapper to make sure that multiple writes or reading during write to the same position do not happen concurrently.
  • Only one growth (capacity expansion) can happen at a given time.
    • If the underlying collection reaches its capacity and needs to grow, one and only one thread takes the responsibility to expand the vector.
  • Growth does not block.
    • Writes to positions which are already within capacity are not blocked by the growth.
    • Writes to to-be-allocated positions wait only for the allocation to be completed; not any other task of the thread responsible for expansion.

As clear from the properties, pinned concurrent collection aims to achieve high performance. It exposes the useful methods that can be used differently for different requirements and marks the methods which can lead to race conditions as unsafe by stating the underlying reasons. This enables building safe wrappers such as ConcurrentBag, ConcurrentOrderedBag or ConcurrentVec.

License

This library is licensed under MIT license. See LICENSE for details.

Dependencies

~325KB