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

no-std 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

17 stable releases

2.8.0 Sep 20, 2024
2.7.0 Sep 6, 2024
2.6.0 Aug 28, 2024
2.2.0 Jul 25, 2024
1.1.0 Apr 12, 2024

#1110 in Concurrency

Download history 330/week @ 2024-08-18 590/week @ 2024-08-25 603/week @ 2024-09-01 1001/week @ 2024-09-08 812/week @ 2024-09-15 999/week @ 2024-09-22 640/week @ 2024-09-29 702/week @ 2024-10-06 469/week @ 2024-10-13 613/week @ 2024-10-20 544/week @ 2024-10-27 616/week @ 2024-11-03 481/week @ 2024-11-10 545/week @ 2024-11-17 687/week @ 2024-11-24 777/week @ 2024-12-01

2,566 downloads per month
Used in 5 crates

MIT license

52KB
569 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.

Contributing

Contributions are welcome! If you notice an error, have a question or think something could be improved, please open an issue or create a PR.

License

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

Dependencies

~475KB