为什么在io.BufferedRandom的实现中有两个锁

时间:2019-04-21 15:36:04

标签: python-3.x multithreading io cpython gil

我正在阅读标准CPython实现(cpython \ Lib_pyio.py)的BufferedRandom实现。它继承了BufferedReader和BufferedWriter。这两个类都有专用锁(互斥锁),用于保护读写操作。

我想知道为什么需要那些锁?我可以想象,如果两个线程仅读取或仅写入基础流,那么它可能会破坏BufferedReader / Writer的状态,因此拥有对读取/写入进行序列化的锁定有点道理。

这是没有意义的事实,因为有两个单独的锁,因此允许两个线程并行读取和写入。我认为它将破裂,因为只有一个基础流。

然后,也许该类不支持同时从两个线程使用?但是如果是这样,那为什么还要麻烦锁呢?

还是GIL在这里起作用?

0 个答案:

没有答案