c++文件锁使用方法 c++如何实现多进程文件同步

Windows用CreateFile+LockFileEx实现跨进程文件锁,需设FILE_SHARE_NONE并调用LockFileEx锁字节范围;Linux/macOS用flock轻量但需防fork继承问题;fcntl更通用但易因多fd误判锁状态;跨平台封装须注意链接、unlink及句柄管理差异。Windows 下用 CreateFile + LockFileEx 做跨进程文件锁Windows 没有 POSIX 风格的 flock,得靠 Win32 API 手动控制。核心是打开文件时加 FILE_SHARE_NONE(或按需设共享标志),再用 LockFileEx 锁具体字节范围------哪怕只锁 1 字节,也能阻塞其他进程对同一区域的读写。常见错误是只调 CreateFile 却不调 LockFileEx,以为句柄独占就等于文件被锁;实际其他进程仍可另开句柄操作文件(尤其当共享标志没关死)。CreateFile 的 dwShareMode 必须设为 0(即 FILE_SHARE_NONE),否则锁无效LockFileEx 的 dwFlags 推荐用 LOCKFILE_EXCLUSIVE_LOCK,避免误读共享锁逻辑锁是字节范围的,lpOverlapped 中的 Offset 和 OffsetHigh 要配对设置,超 4GB 文件必须填 OffsetHigh锁在句柄关闭或进程退出时自动释放,但别依赖这点------显式调 UnlockFileEx 更可控Linux/macOS 用 flock 最简但要注意 fork 行为flock 是最轻量的跨进程文件锁,基于文件描述符,父子进程默认继承锁状态。问题就出在这:fork 后子进程拥有同一 fd,锁也跟着继承,exec 不会丢锁,但 close 会释放锁------哪怕只是子进程 close,父进程的锁也没了。典型翻车场景:用 popen 或自己 fork+exec 启子进程处理日志,结果子进程一退出(触发 fd 关闭),主进程的锁就意外释放。立即学习"C++免费学习笔记(深入)";用 flock(fd, LOCK_EX | LOCK_NB) 加非阻塞锁,失败时立刻报错,别卡住若需 fork 后保持锁,父进程应在 fork 前 dup 一次 fd,子进程用 dup 出的 fd,父进程保留原 fdflock 锁的是整个文件,不支持字节范围;要精细控制请换 fcntl + F_SETLK注意 flock 在 NFS 上可能不可靠,生产环境涉及网络文件系统时优先考虑 fcntlfcntl 的 F_SETLK 为什么更通用但更难写对fcntl 是 POSIX 标准锁,支持字节范围、共享/独占、阻塞/非阻塞,且 NFS 友好。但它要求先用 open 打开文件(不能用 freopen 或 stdio FILE*),且锁状态与 fd 强绑定------每个 fd 独立持锁,不存在"文件级"概念。 Zeemo AI 一款专业的视频字幕制作和视频处理工具

相关推荐
用户56116102327315 分钟前
量化笔记程序代码分析,逐笔数据、五档快照和分钟行情代码分析
数据库
房开民16 分钟前
通俗总结 Octree(八叉树)
java·服务器·数据库
jack1868931 分钟前
Github Copilot 高效开发实战场景指南
python
AIFQuant31 分钟前
Python A股实时行情API接入:沪深股票数据与WebSocket推送实战
开发语言·python·websocket·金融·a股行情
小小龙学IT32 分钟前
Python Matplotlib 数据可视化库深度解析
python·信息可视化·matplotlib
星云低代码开发平台39 分钟前
AI 连接器运行健康度:指标、异常恢复和联调清单
大数据·运维·网络·数据库·人工智能·mcp
小小张说故事1 小时前
Python 到底是值传递还是引用传递?一个赋值实验讲透,别再背结论了
python
Maxwin1 小时前
AI 生成的视频怎么局部修改?2026 年分章生成 Manim 代码的最新做法
python·aigc
鱼宵1 小时前
LangChain4j 生产化改造:记忆落 Redis、向量落 ES,重启再也不丢
数据库·redis·elasticsearch·langchain4j
Java后端的Ai之路1 小时前
07React_Props验证器
人工智能·python·react.js·架构·fastapi