Mutex是最常用的一种同步原语,它提供了互斥锁的功能,多线程可以互斥访问共享数据以及通过锁保护临界区。Rust标准库提供了Mutex的实现,接下来我们看看它是怎么实现的。Mutex的定义Mutex包含三个字段。一个是内部实现的锁(sys::Mutex),根据不同的操作系统,可能选择不同的实现。一个是poison,用来标记锁是否被破坏,是否中毒了。最后一个是data,用来存储被保护的数据。1234567891011pubstructMutex{inner: sys::Mutex,poison: poison::Flag,data: UnsafeCell,}implMutex{pubconstfnnew(t: T) -> Mutex{Mutex { inner: sys::Mutex::new(), poison: poison::Flag::new(), data: UnsafeCell::new(t) }}}另外一个关联的数据结构是MutexGuard, 它是Mutex的一个智能指针,用来管理锁的生命周期。它实现了Deref和Drop,所以可以通过*来访问被保护的数据,当MutexGuard离开作用域时,会自动释放锁。12345```rustpubstructMutexGuard<'a, T: ?Sized + 'a> {lock: &'a Mutex,poison: poiso
...
继续阅读
(154)