您的位置 首页 > 娱乐休闲

linux文件锁:进程间同步实现教程

一、场景

多进程间同步除了信号量、共享内存(原子操作)同步外,还可以使用文件锁来实现。

二、实现

linux中有两种是方式,分别是flock()函数和fcntl()函数。使用效果大致相同

flock函数:

fd:文件描述符

operation:LOCK_SH(添加共享锁,相当于读锁),LOCK_EX(添加排他锁,相当于写锁),LOCK_UN(去除添加到文件的锁,解锁),

LOCK_NB(其可以和LOCK_SH和LOCK_EX组合使用,默认单独使用LOCK_SH和LOCK_EX在没有得到锁资源的情况下,会阻塞,那么添加LOCK_NB,自然就是不阻塞,直接返回结果)

fcntl函数:

使用文件锁则是:

int fcntl(int fd, int cmd, struct flock *);

struct flock定义:

fd:文件描述符

cmd:F_GETLK(获取文件锁的信息,查询),F_SETLK(设置文件锁信息,加锁、解锁、默认不阻塞),F_SETLKW(设置文件锁信息,加锁、解锁、默认阻塞)

struct flock l_type:F_RDLCK(读锁),F_WRLCK(写锁),F_UNLCK(解锁)

struct flock l_whence:文件具体加锁的位置,使用的时候设置同一位置就可以达到加锁的效果,SEEK_SET(文件开头),SEEK_CUR(文件当前位置),SEEK_END(文件结尾)

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“进程如何实现,进程是如何实现的,进程队列如何实现,进程池是如何实现的”边界阅读