C++封装互斥锁_互斥锁 用在类中 c++

这将是开发工程师的梦魇!

那么如何解决呢?C++利用了一个非常好的特性:当一个对象初始化时自动调用构造函数,当一个对象到达其作用域结尾时,自动调用析构函数。所以我们可以利用这个特性解决锁的维护问题:把锁封装在对象内部!此时,在构造函数时获得锁,在语句返回前自动调用析构函数释放锁。
其实这种做法有个专有的名称,叫做RAII(Resource Acquisition Is Initialization)

二、C++封装互斥锁

使用上文直接的方法有一个非常好的特性:高效。
那么锁对象有哪些好处呢?

  • 对包含多个返回点的复杂子程序的维护。
  • 从异常中恢复
  • 锁操作的多态
  • 日志记录的多态。

那么锁对象有哪些坏处呢?
为了解决锁的维护问题(提高了性能),可我们不得不使用面向对象的设计,增加了对象的创建与销毁的开销。
因此,我们下一步的目的是尽量减少它的开销(内联通常是一种补救办法,减少函数调用的开销。)。

利用锁对象可以提供C++新增的强大功能,同时不损失效率。为了验证这个假设,我们测试了三种互斥锁的实现:

  • 直接调用pthread_mutex_lock()和pthread_mutex_unlock()
  • 不从基类继承的独立互斥对象。
  • 从基类派生的互斥对象。
#include <iostream>
#include <ctime>
#include <pthread.h>
using namespace std;

//版本2:锁类,构造函数加锁,析构函数解锁
//用c++简单的封装线程中互斥锁
class SimpleMutex {
public:
	SimpleMutex(pthread_mutex_t& lock) :myLock(lock) { acquare(); }
	~SimpleMutex() { release(); }

p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值