Я читаю реализацию BufferedRandom стандартной реализации CPython (cpython \ Lib_pyio.py). Он наследует BufferedReader и BufferedWriter. Оба класса имеют закрытые блокировки (мьютексы), которые используются для защиты операций чтения и записи.
Мне интересно, зачем нужны эти замки? Я мог бы предположить, что, если два потока только читают или только записывают в основной поток, это может повредить состояние BufferedReader / Writer, поэтому имеет смысл иметь блокировку для сериализации чтения / записи.
Что не имеет смысла, так это тот факт, что есть две отдельные блокировки, поэтому двум потокам разрешено чтение и запись параллельно. Я думаю, что это сломается, поскольку есть только один основной поток.
Тогда, может быть, класс не поддерживает одновременное использование из двух потоков? Но если да, то зачем все-таки беспокоиться о замках?
Или GIL как-то вступает в игру?