在代码中
fn do_something_under_lock(some_bool_mutex: &Mutex<bool>) {
do_something_before_lock();
let some_bool = some_bool_mutex.lock().unwrap();
do_something_with_some_bool(some_bool);
do_something_after_lock();
}
锁定会在do_something_after_lock();
之后才释放吗?(或者也许编译器可以证明我们不需要很长的锁定时间并减少它?)
如果只有在do_something_after_lock();
之后才会释放锁,我们可以通过将lock()
包装到自己的作用域中来更早地释放锁吗,比如
fn do_something_under_lock_in_scope(some_bool_mutex: &Mutex<bool>) {
do_something_before_lock();
{
let some_bool = some_bool_mutex.lock().unwrap();
do_something_with_some_bool(some_bool);
}
do_something_after_lock();
}
包装到作用域是告诉编译器我们想要什么的最好方式,还是我们应该使用其他方式,比如drop
或其他什么?