RAII手法封装互斥锁
RAII手法是 Resource Acquisition is Initialization 的缩写,意为“资源获取即初始化”,在使用智能指针时也使用,下面是针对互斥量时的实现,
1 #include <iostream> 2 #include <pthread.h> 3 4 using namespace std; 5 6 class MutexLock 7 { 8 public: 9 MutexLock() 10 { 11 pthread_mutex_init(&mutex_, NULL); 12 } 13 14 ~MutexLock() 15 { 16 pthread_mutex_destroy(&mutex_); 17 } 18 19 void Lock() 20 { 21 pthread_mutex_lock(&mutex_); 22 } 23 24 void Unlock() 25 { 26 pthread_mutex_unlock(&mutex_); 27 } 28 29 private: 30 MutexLock(const MutexLock&); 31 MutexLock& operator=(const MutexLock&); 32 pthread_mutex_t mutex_; 33 }; 34 35 class MutexLockGuard 36 { 37 public: 38 explicit MutexLockGuard(MutexLock& mutex): mutex_(mutex) 39 { 40 mutex_.Lock(); 41 } 42 43 ~MutexLockGuard() 44 { 45 mutex_.Unlock(); 46 } 47 48 private: 49 MutexLockGuard(const MutexLockGuard&); 50 MutexLockGuard& operator=(const MutexLockGuard&); 51 52 MutexLock& mutex_; 53 }; 54 55 class Foo 56 { 57 public: 58 void print() 59 { 60 MutexLockGuard lock(mutex_); 61 cout << "Hello" << endl; 62 } 63 64 private: 65 MutexLock mutex_; 66 };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用