RAII封装mutex

本文探讨如何利用RAII(Resource Acquisition Is Initialization)模式封装mutex,确保在栈上对象的生命周期内正确管理mutex,避免重复解锁和跨线程问题。尽管std::lock_guard和std::unique_lock提供了类似功能,但在C++11不被g++完全支持的情况下,自定义RAII封装显得尤为重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

采用RAII手法封转mutex使得mutex由栈上对象管理,能保证自动解锁不会重复解锁,加解锁在同一个线程,std::lock_guadr<>,std::unique_lock<>具备这样的功能,但是现在的g++还不支持c++11.

       互斥量MutexLock的RAII封装:成员变量pthread_mutex_t mutex和pid_t holder。MutexLock调用pthread_mutex_init初始化mutex并holder=0;lock()调用pthread_mutex_init和holder为当前加锁线程id;unlock()调用pthread_mutex_unlock和将holder置为0;isLockedByThisThread()判断是否为本线程锁住;getPthreadMutex()返回mutex的指针;assertLocked()判断mutex是否锁住;设置friend class Condition
       互斥量安全加解锁对象MutexLockGuard:成员变量MutexLock。MutexLockGuard(MutexLock& mutex)对mutex上锁,MutexLockGuard()解锁。该封装实现了栈对象多次安全加解锁机制
        条件变量Condition的封装:成员变量有mutexlock和pthread_cond_t;成员函数:Condition(mutex)需要一个mutexlock参数并初始化条件变量;~Conditon()销毁条件变量;wait()调用mutexlock锁住并pthread_cond_wait;waitForSeconds()是否超时;notif()调用pthread_cond_signal;notifyAll()调用pthread_cond_broadcast
#include<iostream>
#include<pthread.h>
#include<boost/utility.hpp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值