Мое понимание RentrantReadWriteLock заключается в том, что он допускает много операций чтения одновременно, но только одну запись.
Когда мы пытаемся получить блокировку чтения, doc
Acquires the read lock if the write lock is not held by another thread and returns immediately.
If the write lock is held by another thread then the current thread becomes disabled
for thread scheduling purposes and lies dormant until the read lock has been acquired.
что здесь означает held
?
- Другой поток запросил блокировку записи и выполняется, чем писать?
or
- Вышеупомянутое и случай, когда другой поток запросил блокировку записи, но ожидает ее получения.
Потому что, когда запрашивается блокировка записи, она не предоставляется, если
- У кого-то еще есть блокировка записи
- У кого-то еще есть блокировка чтения
Из блокировка записи документ:
Acquires the write lock if neither the read nor write lock are held by another
thread and returns immediately, setting the write lock hold count to one.
...
If the lock is held by another thread then the current thread becomes
disabled for thread scheduling purposes and lies dormant until the write lock has
been acquired, at which time the write lock hold count is set to one.
Поэтому, когда поток ожидает блокировку записи после ее запроса, я просто хочу получить представление о последующем поведении вызовов блокировки чтения. Делают ли они запрос на блокировку записи еще дольше или нет?