C++之对同步对象进行封装包装
包装器外观模式:把现有的非面向对象/面向对象API提供的函数和数据(例如底层操作系统API、基础类)封装在更加简洁使用的、健壮的、可维护的和聚合的面向对象的类接口之内,如线程同步对象的包装;
#ifdef LINUX_PTHREADS #include <pthread.h> #include <semaphore.h> #define MUTEX_PTR_DECLARE pthread_mutex_t* #define MUTEX_LOCK(mutex) pthread_mutex_lock(mutex) #define MUTEX_UNLOCK(mutex) pthread_mutex_unlock(mutex) #elif defined(WIN32_THREADS) #include <windows.h> #define MUTEX_PTR_DECLARE CRITICAL_SECTION* #define MUTEX_LOCK(mutex) EnterCriticalSection(mutex) #define MUTEX_UNLOCK(mutex) LeaveCriticalSection(mutex) #endif class Guard { public: Guard(MUTEX_PTR_DECLARE mutex): _mutex (mutex) { MUTEX_LOCK( _mutex ); } ~Guard() { MUTEX_UNLOCK( _mutex ); } private: MUTEX_PTR_DECLARE _mutex; // disable copy Guard(const Guard&); Guard& operator=(const Guard&); }
因此经过上述封装包装后,在函数内使用同步机制时,不管函数的返回路径有多少条,都不需要在每条返回路径上去释放同步对象了,只要在需要使用同步机制的地方构造Guard对象即可,因为Guard对象在析构时自动回释放同步对象。这样就大大减少了出错的机会了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构