【问题标题】:flock doesn't block羊群不阻挡
【发布时间】:2012-12-30 15:45:08
【问题描述】:

我想同步对文件的访问。我正在使用 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

【问题讨论】:

    标签: c++ c linux file concurrency


    【解决方案1】:

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

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

    一般来说,您应该使用共享锁进行读取,而使用独占锁进行写入或读/写。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2012-11-13
        相关资源
        最近更新 更多