Comment by bheadmaster
Comment by bheadmaster 5 hours ago
As a Go programmer, I find it quite puzzling that Rust didn't handle panic edge cases as well as Go did with defer keyword. Defer executes at the end of a function, regardless of whether it returned or panic'd, so you can write safe mutex code just by doing something like:
mutex.Lock()
defer mutex.Unlock()
And if you need to unlock the mutex in one of multiple places, you can wrap it into a sync.Once.There must be a reason Rust doesn't do something similar...
Rust handles this by automatically unlocking when the MutexGuard returned by lock() is dropped. The issue here is not that the mutex remains locked, but rather that the data protected by the mutex might be inconsistent (and the mutex unlocked) after a panic.