Sometimes it is better to use a Mutex
over an RwLock
in Rust:
RwLock<T>
needs more bounds for T
to be thread-safe:
In other words, Mutex
is the only wrapper that can make a T
syncable. I found a good and intuitive explanation in reddit:
Because of those bounds, RwLock requires its contents to be Sync, i.e. it's safe for two threads to have a &ptr to that type at the same time. Mutex only requires the data to be Send, because conceptually you can think of it like when you lock the Mutex it sends the data to your thread, and when you unlock it the data gets sent to another thread.
Use Mutex
when your T
is only Send
and not Sync
.
Preventing writer starvation
RwLock
does not have a specified implementation because it uses the implementation of the system. Some read-write locks can be subject to writer starvation while Mutex
cannot have this kind of issue.
Mutex
should be used when you have possibly too many readers to let the writers have the lock.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…