Rollup merge of #41730 - bholley:arc_comment, r=aturon
Document the reasoning for the Acquire/Release handshake when dropping Arcs. Split out from #41714. r? @aturon
This commit is contained in:
commit
e20b282330
@ -767,7 +767,18 @@ unsafe impl<#[may_dangle] T: ?Sized> Drop for Arc<T> {
|
||||
// > through this reference must obviously happened before), and an
|
||||
// > "acquire" operation before deleting the object.
|
||||
//
|
||||
// In particular, while the contents of an Arc are usually immutable, it's
|
||||
// possible to have interior writes to something like a Mutex<T>. Since a
|
||||
// Mutex is not acquired when it is deleted, we can't rely on its
|
||||
// synchronization logic to make writes in thread A visible to a destructor
|
||||
// running in thread B.
|
||||
//
|
||||
// Also note that the Acquire fence here could probably be replaced with an
|
||||
// Acquire load, which could improve performance in highly-contended
|
||||
// situations. See [2].
|
||||
//
|
||||
// [1]: (www.boost.org/doc/libs/1_55_0/doc/html/atomic/usage_examples.html)
|
||||
// [2]: (https://github.com/rust-lang/rust/pull/41714)
|
||||
atomic::fence(Acquire);
|
||||
|
||||
unsafe {
|
||||
|
Loading…
Reference in New Issue
Block a user