Почему есть две блокировки в реализации io.BufferedRandom - PullRequest
0 голосов
/ 21 апреля 2019

Я читаю реализацию BufferedRandom стандартной реализации CPython (cpython \ Lib_pyio.py). Он наследует BufferedReader и BufferedWriter. Оба класса имеют закрытые блокировки (мьютексы), которые используются для защиты операций чтения и записи.

Мне интересно, зачем нужны эти замки? Я мог бы предположить, что, если два потока только читают или только записывают в основной поток, это может повредить состояние BufferedReader / Writer, поэтому имеет смысл иметь блокировку для сериализации чтения / записи.

Что не имеет смысла, так это тот факт, что есть две отдельные блокировки, поэтому двум потокам разрешено чтение и запись параллельно. Я думаю, что это сломается, поскольку есть только один основной поток.

Тогда, может быть, класс не поддерживает одновременное использование из двух потоков? Но если да, то зачем все-таки беспокоиться о замках?

Или GIL как-то вступает в игру?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...