Crates.io | atomic-int |
lib.rs | atomic-int |
version | 0.1.4 |
source | src |
created_at | 2023-09-18 15:11:51.404494 |
updated_at | 2024-01-27 21:39:47.727844 |
description | Atomics for additional integers, like C/FFI types |
homepage | |
repository | https://github.com/taylordotfish/atomic-int |
max_upload_size | |
id | 975998 |
size | 46,842 |
atomic-int provides atomics for additional integers, such as C/FFI types
like c_int
.
For integer types that are aliases of primitive integers that have built-in Rust atomics, this crate simply re-exports those atomics. Otherwise, this crate provides a spinlock-based fallback implementation with a compatible API.
This crate also provides types that directly correspond with Rust’s
standard atomics, like AtomicU64
, with the difference that the fallback
implementation will similarly be used for any such atomics that are not
supported on a given platform. Thus, all atomics provided by this crate are
available on all platforms1 in some form—either the built-in or fallback
implementation.
Types that directly correspond with Rust’s standard atomics like
AtomicU64
are available with the feature primitives
(enabled by
default). This includes AtomicPtr
, even though it isn’t exactly an
integer.
Atomic C integer types like AtomicCInt
and AtomicCUlong
are
available with the feature c
(enabled by default). For more granularity,
a separate feature exists for each C integer (e.g., c_int
and c_ulong
).
The spinlock-based fallback implementation can cause deadlocks with signal
handlers. To avoid this, enable the feature signal
, which blocks incoming
signals while the lock is held. This feature is Unix-specific.
atomic-int can optionally depend on libc
. If this dependency is
enabled, atomic-int will use the C integer types from libc
instead of
core::ffi
. This should not make a noticeable difference, but it can
decrease the minimum required Rust version, as C integer types were added
to core::ffi
only in version 1.64. The feature signal
always enables
libc
.
This crate is no_std
when libc
is not enabled.
As long as the platform supports AtomicBool
, which is required
for the fallback implementation. ↩