#atomic #garbage #non-blocking #lock-free #rcu

crossbeam

Support for concurrent programming: memory management, utilities, non-blocking data structures

25 releases

0.4.1 Jul 25, 2018
0.3.2 Jan 5, 2018
0.3.0 Aug 1, 2017
0.2.10 Aug 11, 2016
0.1.6 Nov 2, 2015

#15 in Concurrency

Download history 16291/week @ 2018-09-02 19076/week @ 2018-09-09 20647/week @ 2018-09-16 20277/week @ 2018-09-23 19332/week @ 2018-09-30 19299/week @ 2018-10-07 18808/week @ 2018-10-14 19333/week @ 2018-10-21 18629/week @ 2018-10-28 19858/week @ 2018-11-04 19599/week @ 2018-11-11 20679/week @ 2018-11-18 19357/week @ 2018-11-25

82,581 downloads per month
Used in 407 crates (113 directly)

MIT/Apache

509KB
9K SLoC

Crossbeam: support for concurrent programming

Build Status License Cargo Documentation

Crossbeam supports concurrent programming, especially focusing on memory management, synchronization, and non-blocking data structures.

Crossbeam consists of several submodules:

  • atomic for enhancing std::sync API. AtomicConsume provides C/C++11-style "consume" atomic operations (re-exported from crossbeam-utils). ArcCell provides atomic storage and retrieval of Arc.

  • utils and thread for utilities, re-exported from crossbeam-utils. The "scoped" thread API in thread makes it possible to spawn threads that share stack data with their parents. The utils::CachePadded struct inserts padding to align data with the size of a cacheline. This crate also seeks to expand the standard library's few synchronization primitives (locks, barriers, etc) to include advanced/niche primitives, as well as userspace alternatives.

  • epoch for memory management, re-exported from crossbeam-epoch. Because non-blocking data structures avoid global synchronization, it is not easy to tell when internal data can be safely freed. The crate provides generic, easy to use, and high-performance APIs for managing memory in these cases. We plan to support other memory management schemes, e.g. hazard pointers (HP) and quiescent state-based reclamation (QSBR).

  • Concurrent data structures which are non-blocking and much superior to wrapping sequential ones with a Mutex. Crossbeam currently provides channels (re-exported from crossbeam-channel), deques (re-exported from crossbeam-deque), queues, and stacks. Ultimately the goal is to also include bags, sets and maps.

Usage

Add this to your Cargo.toml:

[dependencies]
crossbeam = "0.5"

Next, add this to your crate:

extern crate crossbeam;

The minimum required Rust version is 1.26.

License

Licensed under the terms of MIT license and the Apache License (Version 2.0).

See LICENSE-MIT and LICENSE-APACHE for details.

Dependencies

~1.5MB
~24K SLoC