打印

RAII手法封装互斥锁

[复制链接]
269|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2022-10-10 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
RAII手法是 Resource Acquisition is Initialization 的缩写,意为“资源获取即初始化”,在使用智能指针时也使用,下面是针对互斥量时的实现:
#include <iostream>
#include <pthread.h>

using namespace std;

class MutexLock
{
public:
    MutexLock()
    {
        pthread_mutex_init(&mutex_, NULL);
    }

    ~MutexLock()
    {
        pthread_mutex_destroy(&mutex_);
    }

    void Lock()
    {
        pthread_mutex_lock(&mutex_);
    }

    void Unlock()
    {
        pthread_mutex_unlock(&mutex_);
    }

private:
    MutexLock(const MutexLock&);
    MutexLock& operator=(const MutexLock&);
    pthread_mutex_t mutex_;
};

class MutexLockGuard
{
public:
    explicit MutexLockGuard(MutexLock& mutex): mutex_(mutex)
    {
        mutex_.Lock();
    }

    ~MutexLockGuard()
    {
        mutex_.Unlock();
    }

private:
    MutexLockGuard(const MutexLockGuard&);
    MutexLockGuard& operator=(const MutexLockGuard&);

    MutexLock& mutex_;
};

class Foo
{
public:
    void print()
    {
        MutexLockGuard lock(mutex_);
        cout << "Hello" << endl;
    }

private:
    MutexLock mutex_;
};


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

1314

主题

12271

帖子

53

粉丝