Abr*_*ile 1 c c++ linux concurrency file
我想同步对文件的访问。我正在使用 Linux 和 g++。
我想使用函数锁定文件flock()
。我开发了两个测试应用程序,在同一文件中写入和读取。他们都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
Run Code Online (Sandbox Code Playgroud)
flock
仅当至少一个进程使用它时才会阻塞LOCK_EX
:
一般来说,您应该使用共享锁进行读取,使用独占锁进行写入或读/写。