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 一款专业的视频字幕制作和视频处理工具

相关推荐
怪奇云呼军5 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
ZC跨境爬虫6 小时前
LeetCode 27. 移除元素(双指针详解 + Java Python 多解法对比)
java·python·leetcode
路溪非溪6 小时前
Python语言的执行流程总结
开发语言·python
逐米时代6 小时前
智能招聘与人岗匹配:可解释匹配让录用依据有迹可循
大数据·数据库·人工智能
承渊政道6 小时前
KES专业技能包发布:覆盖数据库开发、迁移与运维全流程
运维·数据库·gitee·数据库开发·金仓数据库
宋均浩6 小时前
AI 生成代码质量防线实战:5 个 CI/CD 配置,把 8% 的逻辑错拦在线上之前0
python
树码小子6 小时前
Pycharm解释器配置问题解决
ide·python·pycharm
IvorySQL6 小时前
PostgreSQL 日报| RI 快速路径并发读取缺陷(8 月 13 日)
数据库·postgresql
国雪7 小时前
python-协程
python
一木 之林7 小时前
Python.六.(一)--1.标准库、常用工具与基础操作(进阶)
python·rpc·dubbo