- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
考虑这样一种情况,其中两个进程并发尝试使用 flock(fd, LOCK_EX|LOCK_NB)
对某个文件放置独占锁。
如前所述,尝试是非阻塞,因此这两个进程之一应该会因 EWOULDBLOCK
而失败。
这是我的问题:flock()
的 (Linux) 实现是否保证在每种情况下两个进程中的一个进程会成功?或者,是否有可能两者都以 EWOULDBLOCK
失败,即使没有其他人进行干扰?
简而言之,flock(fd, LOCK_EX|LOCK_NB)
是否会因 EWOULDBLOCK
错误地失败?
我主要对 Linux 提供的 flock()
版本感兴趣,但欢迎提供有关其他系统(如 OS X)上的 flock()
的信息.
此外,我假设无论锁是独占的 (LOCK_EX
) 还是共享的 (LOCK_SH
),答案都是一样的。如果没有,请告诉我。
最佳答案
阅读 man flock(2) :
EWOULDBLOCK The file is locked and the LOCK_NB flag was selected.
所以得到 EWOULDBLOCK 意味着文件已经被锁定。如果保证您的两个进程是唯一涉及的进程,它们将永远不会同时在同一个文件上获得 EWOULDBLOCK。
请注意线程是另一回事。线程通常共享文件描述符,因此同一进程中的多个线程可以在同一文件上成功调用 flock()。
关于linux - Linux flock(fd, LOCK_EX|LOCK_NB) 会虚假地失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21117264/
为什么我无法读取使用LOCK_EX锁定的文件?我仍然可以写入该文件。 我想知道,如果一个进程锁定一个文件(使用 LOCK_SH 或 LOCK_EX),而另一个进程尝试读取该文件或写入该文件,会发生什么
为什么我无法读取使用LOCK_EX锁定的文件?我仍然可以写入该文件。 我想知道,如果一个进程锁定一个文件(使用 LOCK_SH 或 LOCK_EX),而另一个进程尝试读取该文件或写入该文件,会发生什么
一个简单的问题。尝试读取使用 LOCK_EX 的 file_put_contents 锁定的文件的脚本是否会等到文件解锁或读取失败并继续? 最佳答案 简单的答案是它们不会阻塞但会失败。 Groovep
我在 flock manual 找到了以下描述: By default, this function will block until the requested lock is acquired 在
考虑这样一种情况,其中两个进程并发尝试使用 flock(fd, LOCK_EX|LOCK_NB) 对某个文件放置独占锁。 如前所述,尝试是非阻塞,因此这两个进程之一应该会因 EWOULDBLOCK 而
我正在使用: file_put_contents("peopleList.txt", $person, FILE_APPEND | LOCK_EX); 写入文件末尾并确保没有其他人(或脚本)同时写入同
我是一名优秀的程序员,十分优秀!