The RwLock is the parallel equivalent of the RefCell we worked with in Chapter 5, Advanced Data Structures; Working with interior mutability. The big difference is that, while RefCell panics on a violation of Rust's ownership concept, RwLock simply blocks the current thread until the violation is over.
The analog of the borrow() method of RefCell is read() [17], which locks the resource for immutable access. The analog of borrow_mut() is write() [51], which locks the resource for mutable access. Makes sense, doesn't it?
These methods return a Result, which tells us whether the thread is poisoned. The meaning of poisoning is different for every lock. In an RwLock, it means that the thread that locked the resource for write access panicked. This way, you can react to panics in other threads and treat them in some way. One example where this can be useful is sending some logs to a server before a crash happens in order to diagnose the problem. In most cases, though...