首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >令人困惑的羊群文献(2)

令人困惑的羊群文献(2)
EN

Stack Overflow用户
提问于 2017-11-15 05:44:01
回答 1查看 398关注 0票数 2

如果一个进程使用open(2) (或类似的)为同一个文件获取多个描述符,这些描述符将由flock()独立处理。使用这些文件描述符之一锁定文件的尝试可能被调用进程已通过另一个描述符放置的锁拒绝。

如果flock()独立处理描述符,那么为什么通过另一个描述符放置的锁会拒绝使用其中一个文件描述符锁定文件呢?在这里独立意味着什么?

另外,如果我解锁其中一个描述符,其他描述符也会解锁吗?

EN

回答 1

Stack Overflow用户

发布于 2017-11-15 06:05:53

flock()独立处理意味着,在试图修改另一个描述符时,flock()不会“询问”一个描述符。然而,这并不意味着他们是真正独立的。如果flock()试图锁定其中一个,而另一个已被锁定,则此尝试可能会阻止。

把它看作是两级机制。flock()一次只查看一个描述符,但最终,在尝试锁定时,系统会尝试移动到dipper级别并实际锁定,然后就会出现问题。

另外,如果我解锁其中一个描述符,其他描述符也会解锁吗?

我没有把握。这个引号(下面)指出,如果一个文件有来自fork(2), dup(2)的多个描述符,情况就是这样。然而,在处理多个open(2)的第二段中,没有什么能说明这一点,这使我相信这不是一件好事:)

来自这里

flock()创建的锁与打开的文件描述相关联(参见open(2))。这意味着重复的文件描述符(例如,由fork(2)或dup(2)创建)引用同一个锁,并且可以使用这些文件描述符的任何修改或释放该锁。此外,锁可以通过对任何重复文件描述符的显式LOCK_UN操作来释放,或者在关闭所有此类文件描述符时释放。 如果一个进程使用open(2) (或类似的)为同一文件获取多个文件描述符,这些文件描述符将由flock()独立处理。使用这些文件描述符之一锁定文件的尝试可能被调用进程已通过另一个文件描述符放置的锁拒绝。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47300202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档