Skip to content
 
 

Repository files navigation

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 either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

Support for parallelism and low-level concurrency in Rust

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages