An open API service indexing awesome lists of open source software.

https://github.com/jorendorff/atomicbox

Safe atomic Box types for Rust
https://github.com/jorendorff/atomicbox

atomics concurrency rust

Last synced: 9 months ago
JSON representation

Safe atomic Box types for Rust

Awesome Lists containing this project

README

          

# atomicbox

**Safe atomic boxes.**

[![Documentation](https://docs.rs/atomicbox/badge.svg)](https://docs.rs/atomicbox)
[![](https://img.shields.io/crates/v/atomicbox.svg)](https://crates.io/crates/atomicbox)
[![](https://img.shields.io/crates/d/atomicbox.svg)](https://crates.io/crates/atomicbox)
[![Build Status](https://github.com/jorendorff/atomicbox/actions/workflows/ci.yml/badge.svg)](https://github.com/jorendorff/atomicbox/actions?query=workflow%3Aci)

This crate provides `AtomicBox` and `AtomicOptionBox` types: safe, owning
versions of the standard library's `AtomicPtr`.

Unfortunately, the only operations you can perform on an atomic box are
swaps and stores: you can't just use the box without taking ownership of it.
Imagine a `Box` without `Deref` or `DerefMut` implementations, and you'll
get the idea. Still, this is sufficient for some lock-free data structures,
so here it is!

### Why no `Deref`?

It wouldn't be safe. The point of an `AtomicBox` is that other threads can
obtain the boxed value, take ownership of it, even drop it, all without
taking a lock. So there is no safe way to borrow that value—except to swap
it out of the `AtomicBox` yourself.

This is pretty much the same reason you can't borrow a reference to the
contents of any other atomic type. It would invite data races. The only
difference here is that those contents happen to be on the heap.

License: MIT/Apache-2.0