前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++多线程编程学习二 [类中封装互斥量的设计]

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

作者头像
王亚昌
发布2018-08-03 14:51:47
5010
发布2018-08-03 14:51:47
举报
文章被收录于专栏:王亚昌的专栏王亚昌的专栏

      之前我也提到过,如果一个类的数据成员中在多线程环境中可能会被竞争使用时,一定要在类中解决这个问题,而不是在代码编写过程中在每次使用时去申请或释放,这样做的确很灵活,但是随着代码量的增加和开发时间长的话,你可能会漏掉或忘记对竞争资源的处理,believe me!这是每个程序员都会犯的错误,因此,我们必须在类的设计时就考虑到这个问题,这样做也可以避免在别人使用你的类的时候,在不了解类结构的情况下犯相同的错误。         那么类究竟应该怎么设计呢?         C++ 最大的优点不仅仅是面向对象,继承和多态也是它很重要的优点,在些我们就可以利用这些优点。在《c++面向对象多线程编程》一书中给出过一个不错的例子,我拿出来和大家共同分析一下。         首先设计一个“简单的互斥接口类”----mutex 该类功能是提供互斥量及操作

代码语言:javascript
复制
class mutex{
protected:
HANDLE Mutex;
public:
mutex();
~mutex();
int lock();
void unlock();
};
然后给出实现主要功能的类,在此以计算器类为例
class calculator{
protected:
double Result;
public:
calculator();
calculator(string Input);
};

计算器类可包含多种操作,上面只写出其中几个成员函数。 然后,再出给连接这两个类的接口类

代码语言:javascript
复制

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函数时,代码编写人员无需考虑数据竞争问题,可直接使用,因为互斥量的申请与释放在类中完成。         这样,我们就完成了计算器类的设计。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010年02月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档