flock
我已经阅读了关于/ lockf
/之间区别的足够多的关于 stackoverflow 的帖子,fcntl
但我无法回答以下观察结果:
>>> import fcntl
>>> a = open('/tmp/locktest', 'w')
>>> b = open('/tmp/locktest', 'w')
>>> fcntl.lockf(a, fcntl.LOCK_EX | fcntl.LOCK_NB)
>>> fcntl.lockf(a, fcntl.LOCK_EX | fcntl.LOCK_NB)
>>> fcntl.lockf(b, fcntl.LOCK_EX | fcntl.LOCK_NB)
>>>
>>> a.close()
>>> b.close()
>>> a = open('/tmp/locktest', 'w')
>>> b = open('/tmp/locktest', 'w')
>>> fcntl.flock(a, fcntl.LOCK_EX | fcntl.LOCK_NB)
>>> fcntl.flock(a, fcntl.LOCK_EX | fcntl.LOCK_NB)
>>> fcntl.flock(b, fcntl.LOCK_EX | fcntl.LOCK_NB)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 35] Resource temporarily unavailable
为什么这两种情况下的行为不同?我知道显而易见的答案是,这是两种不同的锁定机制。我在寻找:
- 归档( )实际上
lockf()
或flock()
做什么inode/fd
? - 根据演示,我们是否允许递归获取相同的锁?
我了解基础知识fds
和东西,所以我希望有一个对操作系统级别细节有更多见解的技术答案。
OSX 10.9.3,Python:2.7.5