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 };
复制代码

 

posted @   WendellYih  阅读(1022)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示