几个独立的进程(不是由一个 fork 出来的,都是单独跑的)去读写一个文件,为了避免写乱,想着在读写文件时加锁,想问一下大佬们,几个独立的进程间如何共享锁,在同一台设备上的。
几个独立的进程(不是由一个 fork 出来的,都是单独跑的)去读写一个文件,为了避免写乱,想着在读写文件时加锁,想问一下大佬们,几个独立的进程间如何共享锁,在同一台设备上的。
|
WildCatMay 27, 2022
1
参考 SQLite
参考 Git |
|
eoteMay 27, 2022
2
不考虑高并发的情况,可以写之前判断指定目录有没有特定空文件,没有则生成,写完再删
|
|
mingl0280May 27, 2022
3
flock
shared pthread lock semaphore 就这三种,随便想用哪种咯 |
|
eoteMay 27, 2022
4
考虑并发就起个 redis 或者数据库
|
|
GeruzoniAnsasuMay 27, 2022
5
|
|
urAppsMay 27, 2022
6
|
|
cubecubeMay 27, 2022
7
性能要求不高的话,/var/run 下面弄个文件锁就行。。
|
|
codehzMay 27, 2022
8
看你需求,用锁的方案楼上都有写
如果是每个进程都是往尾部写的情况,倒是可以用 append 模式打开文件,然后一次只发一行(关闭缓冲区避免拆分),日志都是这样做的 |
|
LeegoYihMay 27, 2022
9
windows 可以调 win32api ,用 mutex 互斥体
|
|
LeeReamondJun 3, 2022
10
借楼问一下,类似 flock 这种内核提供的文件锁,楼上文档里写是没有超时时间接口的,如果 A 进程获取锁以后挂了,那锁不是永远放不出来了?
|
|
GeruzoniAnsasuJun 4, 2022
11
@LeeReamond A 进程如果还能消失,那么说明内核已经正确处理了这个进程所有资源的释放,包括它持有的任何锁和 fd 。但你要说那种常见的 .lock 文件由于进程崩了没删掉导致程序误判,那属于逻辑问题,跟锁本身无关
|
|
LeeReamondJun 5, 2022
12
@GeruzoniAnsasu 进程彻底消失的话系统分配的资源也会被释放,很合理。是否存在一种中间状态,比如 windows 操作系统中有类似程序未响应,等待响应的状态,此时资源也没有释放,业务逻辑也没有执行
|
|
GeruzoniAnsasuJun 5, 2022
13
@LeeReamond 当然是有可能的,所以一般还会有非阻塞的使用方式,比如 flock 有个 LOCK_NB 控制位
|