1

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

我想通过使用函数来锁定文件flock()。我开发了 2 个测试应用程序,向/从同一个文件写入和读取。他们都flock()LOCK_SH.

作家首先开始,写作,然后睡觉。第二个应用程序稍后启动。我期待阅读器应用程序在调用时会阻塞,flock()因为编写器进程没有释放锁。

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

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

2 回答 2

4

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

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

通常,您应该使用共享锁进行读取,而使用独占锁进行写入或读/写。

于 2013-01-16T10:49:18.543 回答
2

LOCK_SH是共享锁。这意味着同时持有这样一个锁的多个进程没有问题。读者使用这种锁。

于 2013-01-16T10:46:51.043 回答