我正在学习python语言。我对线程没有很好的理解,当你需要threading.Lock()时我无法想到这种情况,因为CPython的GIL只允许一次执行一个线程所以我认为关键部分不能被访问两个线程同时出现。
答案 0 :(得分:2)
GIL保证随时执行一个进程。 但是,使用线程时,您可能在线程之间共享文件或其他对象。即使在任何时刻只有一个线程处于活动状态(由于GIL),多个线程也可以访问同一个对象,这是锁进入游戏时的情况。使用threading.Lock()可以避免在第一个线程已经使用它时第二个线程访问给定对象。
假设您有一个文件,两个线程想要写同一个文件。 GIL保证在给定时刻只执行一次WRITE操作,Lock将保证只有一个线程可以写入该文件。