gpt4 book ai didi

c++ - flock 不会阻塞

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:27 26 4
gpt4 key购买 nike

我想同步对文件的访问。我正在使用 Linux 和 g++。

我想使用函数 flock() 锁定文件。我开发了 2 个测试应用程序写入和读取同一个文件。他们都使用 LOCK_SH 调用 flock()

作家先动笔,写完再睡。第二个应用程序稍后启动。我期望看到读取器应用程序在调用 flock() 时阻塞,因为写入器进程没有释放锁。

这是正确的期望还是它们仅在同时调用 read()write() 时才阻塞,即在同一时间?我误解了什么?

    PROG A                PROG B
-open file
-flock -open file
-write -sleep 5
-sleep 1000 -flock ** expected to block ?? **
-close -read data

最佳答案

flock 只有在至少一个进程使用 LOCK_EX 时才会阻塞:

  • 如果某个进程持有独占锁,那么任何试图获得独占/共享锁的进程都将被阻止。
  • 如果某个进程持有共享锁,则试图获取排它锁的进程将被阻塞。

一般来说,你应该对读使用共享锁,对写或读/写使用独占锁。

关于c++ - flock 不会阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14356451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com