A
Size: a a a
A
Э
parking_lot::Mutex, он без пойзонинга работает.Э
A
.expect("poisoned mutex") или что-то в этом роде, т.к. от именно unwrap() в продакшен-коде меня немного коробит. Проще контролировать, что в коде ноль анврапов, чем каждый раз разбираться, какие из них "безопасные"...Э
Э
parking_lot.A
c
parking_lot.A
Э
fn update_data(&mut self) {
struct PanicBomb<'a>(&'a mut Self);
impl Drop for PanicBomb<'_> { fn drop(&mut self) { self.undo_changes() } }
…
}Э
parking_lot — в safe коде он не нужен.Э
Э
if catch_unwind(|| change_data()).is_err() {
undo_changes();
}A
fn update_data(&mut self) {
struct PanicBomb<'a>(&'a mut Self);
impl Drop for PanicBomb<'_> { fn drop(&mut self) { self.undo_changes() } }
…
}Э
Э
Э
unsafe коде это делается для того, чтобы избежать UB.A
A
Э
join.