5

通过fcntl. _ 我想知道这些锁是否是可重入的,即。进程可以获取它已经拥有的锁吗?

4

1 回答 1

4

建议锁定fcntl是基于每个进程的,并且只是在给定进程的文件上累积锁定间隔。也就是说,由应用程序来跟踪间隔,并且任何对间隔的解锁调用都将解锁它,而不管对该间隔进行了多少次锁定调用。

更糟糕的是,关闭文件的任何文件描述符都会取消文件上的所有锁定:

除了通过显式 F_UNLCK 删除之外,记录锁在进程终止或关闭任何引用持有锁的文件的文件描述符时会自动释放。这很糟糕:这意味着当库函数出于某种原因决定打开、读取和关闭文件时,进程可能会失去对 /etc/passwd 或 /etc/mtab 等文件的锁定。

于 2012-11-04T16:03:41.663 回答