首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >flock不会阻塞

flock不会阻塞
EN

Stack Overflow用户
提问于 2013-01-16 18:40:47
回答 2查看 1.9K关注 0票数 1

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

我想使用函数flock()来锁定文件。我开发了两个测试应用程序,对同一文件进行写入和读取。它们都使用LOCK_SH调用flock()

写入者先开始写,然后睡觉。第二个应用程序稍后启动。我期望看到阅读器应用程序在调用flock()时阻塞,因为写入器进程没有释放锁。

这是正确的预期吗?还是只有在同时调用read()write()时才会阻塞?我误解了什么?

代码语言:javascript
复制
    PROG A                PROG B
    -open file
    -flock                -open file
    -write                -sleep 5     
    -sleep 1000           -flock    ** expected to block ?? **
    -close                -read data
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-16 18:49:19

只有在至少有一个进程将其与LOCK_EX一起使用时,flock才会阻塞

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

通常,您应该对读使用共享锁,对写或读/写使用独占锁。

票数 4
EN

Stack Overflow用户

发布于 2013-01-16 18:46:51

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14356451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档