C++多线程编程学习二 [类中封装互斥量的设计]

来源:互联网 发布:java逆序输出一个整数 编辑:程序博客网 时间:2024/06/16 02:19

      之前我也提到过,如果一个类的数据成员中在多线程环境中可能会被竞争使用时,一定要在类中解决这个问题,而不是在代码编写过程中在每次使用时去申请或释放,这样做的确很灵活,但是随着代码量的增加和开发时间长的话,你可能会漏掉或忘记对竞争资源的处理,believe me!这是每个程序员都会犯的错误,因此,我们必须在类的设计时就考虑到这个问题,这样做也可以避免在别人使用你的类的时候,在不了解类结构的情况下犯相同的错误。
        那么类究竟应该怎么设计呢?
        C++ 最大的优点不仅仅是面向对象,继承和多态也是它很重要的优点,在些我们就可以利用这些优点。在《c++面向对象多线程编程》一书中给出过一个不错的例子,我拿出来和大家共同分析一下。
        首先设计一个“简单的互斥接口类”----mutex 该类功能是提供互斥量及操作
class mutex{
protected:
HANDLE Mutex;
public:
mutex();
~mutex();
int lock();
void unlock();
};
然后给出实现主要功能的类,在此以计算器类为例
class calculator{
protected:
double Result;
public:
calculator();
calculator(string Input);
};
计算器类可包含多种操作,上面只写出其中几个成员函数。
然后,再出给连接这两个类的接口类
class mt_calculator:private mutex{
private:
calculator Calculator;
public:
mt_calculator();
double evaluate(string Input);
};
double mt_calculator::evaluate(string Input)
{
if( SUCCEED == lock())
{
     printf("Do the task");
     unlock();
     return Result;
}
return 0;
}
        该类私有继承了mutex类,同时,包容了calculator类,同时,只提供calculator类有用的接口,这样,在calculator对象的使用时,在调用evaluate函数时,代码编写人员无需考虑数据竞争问题,可直接使用,因为互斥量的申请与释放在类中完成。
        这样,我们就完成了计算器类的设计。

原创粉丝点击