1.0 KiB
Bit-Slice Thread Safety
This allows bit-slice references to be moved across thread boundaries only when
the underlying T element can tolerate concurrency.
All BitSlice references, shared or exclusive, are only threadsafe if the T
element type is Send, because any given bit-slice reference may only have
partial control of a memory element that is also being shared by a bit-slice
reference on another thread. As such, this is never implemented for Cell<U>,
but always implemented for AtomicU and U for a given unsigned integer type
U.
Atomic integers safely handle concurrent writes, cells do not allow concurrency
at all, so the only missing piece is &mut BitSlice<_, U: Unsigned>. This is
handled by the aliasing system that the mutable splitters employ: a mutable
reference to an unsynchronized bit-slice can only cross threads when no other
handle is able to exist to the elements it governs. Splitting a mutable
bit-slice causes the split halves to change over to either atomics or cells, so
concurrency is either safe or impossible.