我已经在stackoverflow上阅读了足够多关于差异b/wflock/lockf/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
为什么这两种情况下的行为不同?我知道明显的答案,这是两种不同的锁定机制。我在找:
我了解fds
和其他东西的基本知识,所以我希望有一个技术性的答案,对操作系统级别的细节有更多的见解。
OSX 10.9.3,Python:2.7.5
一篇关于这个的好文章: On the Brokenness of File Locking
简而言之:
POSIX锁:
BSD锁:
此外
良好的测试分析: Advisory File Locking – My take on POSIX and BSD locks
摘要摘录:
相关问题 更多 >
编程相关推荐