资讯详情

Linux 学习笔记(三十七):System V IPC 进阶——用建造者与责任链模式重构底层接口

📅 2026/10/29 2:06:57 | 华诺云谱 👁 阅读
Linux 学习笔记(三十七):System V IPC 进阶——用建造者与责任链模式重构底层接口
核心结论TL;DRSystem V 缺陷接口semget/msgget极其反人类且生命周期随内核不手动删就会导致资源泄漏。信号量Semaphore本质是一个计数器。P 操作申请资源减1V 操作释放资源加1。使用建造者模式Builder可以优雅地初始化信号量集合。消息队列Message Queue支持带“类型”的数据块实现优先级。使用责任链模式Chain of Responsibility可以流水线式处理消息格式化 - 落盘 - 备份。清理命令ipcs -s/ipcs -q查看ipcrm -s id/ipcrm -q id手动删除。一、 为什么需要设计模式原生的 System V IPC 接口如semctl中的union semun构造非常繁琐。如果在业务代码里直接调用会导致代码极其臃肿。我们利用经典的设计模式对这些系统调用进行二次封装。二、 信号量基于建造者模式封装信号量Semaphore用于多进程/多线程间的同步与互斥。因为它涉及的参数较多Key生成、创建标志、初始值设定这里引入建造者模式。// 核心思想链式调用最后 Build 出对象 class SemaphoreBuilder { public: SemaphoreBuilder SetVal(int val) { _val val; return *this; } sem_sptr Build(int flag) { // 内部完成 ftok, semget, semctl 的初始化 // ... return std::make_sharedSemaphore(semid, flag); } }; // 使用方式极其优雅 SemaphoreBuilder sb; auto fsem sb.SetVal(1).Build(BUILD_SEM); fsem-P(); // 加锁 fsem-V(); // 解锁三、 消息队列基于责任链模式封装消息队列允许进程发送带有mtype类型的数据块。假设我们有这样一个需求客户端发来消息我们需要依次经过“拼接时间格式化” - “写入文件持久化” - “判断文件大小过大则打包备份”。用if-else写会很乱引入责任链模式Chain of Responsibility。// 1. 抽象处理者 class HandlerText { public: void SetNextHandler(std::shared_ptrHandlerText handler) { _next_handler handler; } virtual void Execute(std::string info) 0; protected: std::shared_ptrHandlerText _next_handler; }; // 2. 具体处理者格式化 class HandlerTextFormat : public HandlerText { void Execute(std::string info) override { // 处理逻辑拼接时间 info time_str info; if (_next_handler) _next_handler-Execute(info); // 交给下一个节点 } }; // 3. 具体处理者写文件 class HandlerTextSaveFile : public HandlerText { void Execute(std::string info) override { // 处理逻辑写文件 if (_next_handler) _next_handler-Execute(info); } }; // 4. 组装责任链 _format-SetNextHandler(_save); _save-SetNextHandler(_backup); _format-Execute(msg); // 只要触发头部整个流水线就会自动跑起来四、 避坑指南资源清理System V IPC 对象共享内存、消息队列、信号量的生命周期随内核。即使创建它们的进程崩溃了资源也会一直留在系统里。ipcs -q # 查看消息队列 ipcs -s # 查看信号量 ipcrm -q msqid # 删除指定的消息队列
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑