rwlock
go rust lock concurrency mutex deadlock
A reader-writer lock
Mutex 는 read lock 과 write lock 분리되어있지 않다. 하나의 lock 으로 읽기/쓰기 잠금을 모두할 수 있다. 하나의 쓰레드만 자원에 접근하도록 보장하는 잠금 방식이며, 단일 접근 제어에 사용된다.
반면, rwlock 은 read/write lock 을 분리하여 read performance 을 향상 시키는 것이 목적이다. rwlock 은 공유 데이터에 액세스할 때 더 높은 수준의 동시성을 허용한다.
- read lock: 여러 쓰레드가 동시에 읽기를 수행할 수 있다. 읽기 작업은 공유가 가능하므로 여러 쓰레드가 동시에 접근해도 무방하다.
- write lock: 쓰기 작업이 발생하면, 다른 쓰레드의 읽기/쓰기 접근을 모두 막고 단일 쓰레드만 접근할 수 있다.
읽기 작업이 빈번하고 쓰기 작업이 드문 경우 적합하다.
Potential Deadlock
// Thread 1 | // Thread 2
let _rg1 = lock.read(); |
| // will block
| let _wg = lock.write();
// may deadlock |
let _rg2 = lock.read(); |