У меня есть многопоточная программа, в которой я создал экземпляр ReadWriteLock с истинной справедливой стоимостью. Это приложение перестало отвечать.
Ниже приведены наши выводы на основе дампа потока. Один поток получил блокировку чтения и заблокировал операцию БД во время выполнения. Долго не отпускал замок.
Есть еще три потока, кроме вышеупомянутого. Один поток ожидает блокировки записи. В то время как два других потока ожидают блокировки чтения.
Вопрос в том, почему два потока ждут блокировки чтения? Это происходит потому, что справедливая стоимость истинна, и поток, запрашивающий блокировку записи, пришел раньше, чем два потока, запросившие блокировку чтения? Будет ли система блокировать потоки, запрашивающие блокировку чтения, если поток, запрашивающий запись, пришел раньше?