orx-pinned-concurrent-col

Crates.ioorx-pinned-concurrent-col
lib.rsorx-pinned-concurrent-col
version2.8.0
sourcesrc
created_at2024-04-12 03:10:26.970946
updated_at2024-09-20 13:00:03.744384
descriptionA core data structure with a focus to enable high performance, possibly lock-free, concurrent collections using a PinnedVec as the underlying storage.
homepage
repositoryhttps://github.com/orxfun/orx-pinned-concurrent-col/
max_upload_size
id1205923
size75,607
Ugur Arikan (orxfun)

documentation

README

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.

Commit count: 37

cargo fmt