aci*_*oal 10 dpkg lock concurrency
dpkg/var/lib/dpkg/lock在使用时使用锁定文件 ( )。
Hal*_*ost 15
这不是一个dpkg特定的问题(正如我的编辑标题所建议的那样)。相反,这是每个包管理器(我知道)都会做的事情;并且有充分的理由。不过,我确实理解为什么它可能会令人困惑。
包管理器依靠数据库来跟踪已安装包的信息。如果多个用户同时尝试写入数据库,则很有可能损坏数据(这真的会破坏系统)。
结果,许多(全部?)包管理器依赖于锁定文件来表示正在写入数据库,因此不应允许另一个客户端这样做。
请注意,智能包管理器可能能够确定请求何时是只读的,并且可能不需要锁定数据库。其结果; 某些操作可以同时运行,而其他操作则不能。
锁定文件用于防止多个实例并行执行。
为什么这对包管理器很重要?
包管理器——从高层次的角度来看——是一个对硬盘应用复杂更改的程序。
更改不能一步完成(“原子”),因此需要多个步骤;许多步骤取决于先前步骤的结果。
因此,包管理器需要在执行每个步骤之前分析硬盘,或者简单地分析一次并跟踪它自己应用的更改。第一个选项非常慢。第二个要求没有其他实例进行更改。
还有许多其他问题可能会出现。
这不是不可能实现,可以并行工作的软件包管理器,但它太复杂,是值得的。就像在,你无法想象有多复杂。真的。