RAII手法封装互斥锁

[复制链接]
 楼主| keer_zu 发表于 2022-10-10 14:30 | 显示全部楼层 |阅读模式
RAII手法是 Resource Acquisition is Initialization 的缩写,意为“资源获取即初始化”,在使用智能指针时也使用,下面是针对互斥量时的实现:
  1. #include <iostream>
  2. #include <pthread.h>

  3. using namespace std;

  4. class MutexLock
  5. {
  6. public:
  7.     MutexLock()
  8.     {
  9.         pthread_mutex_init(&mutex_, NULL);
  10.     }

  11.     ~MutexLock()
  12.     {
  13.         pthread_mutex_destroy(&mutex_);
  14.     }

  15.     void Lock()
  16.     {
  17.         pthread_mutex_lock(&mutex_);
  18.     }

  19.     void Unlock()
  20.     {
  21.         pthread_mutex_unlock(&mutex_);
  22.     }

  23. private:
  24.     MutexLock(const MutexLock&);
  25.     MutexLock& operator=(const MutexLock&);
  26.     pthread_mutex_t mutex_;
  27. };

  28. class MutexLockGuard
  29. {
  30. public:
  31.     explicit MutexLockGuard(MutexLock& mutex): mutex_(mutex)
  32.     {
  33.         mutex_.Lock();
  34.     }

  35.     ~MutexLockGuard()
  36.     {
  37.         mutex_.Unlock();
  38.     }

  39. private:
  40.     MutexLockGuard(const MutexLockGuard&);
  41.     MutexLockGuard& operator=(const MutexLockGuard&);

  42.     MutexLock& mutex_;
  43. };

  44. class Foo
  45. {
  46. public:
  47.     void print()
  48.     {
  49.         MutexLockGuard lock(mutex_);
  50.         cout << "Hello" << endl;
  51.     }

  52. private:
  53.     MutexLock mutex_;
  54. };


您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部
个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1478

主题

12912

帖子

55

粉丝
快速回复 在线客服 返回列表 返回顶部