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

      之前我也提到过,如果一个类的数据成员中在多线程环境中可能会被竞争使用时,一定要在类中解决这个问题,而不是在代码编写过程中在每次使用时去申请或释放,这样做的确很灵活,但是随着代码量的增加和开发时间长的话,你可能会漏掉或忘记对竞争资源的处理,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函数时,代码编写人员无需考虑数据竞争问题,可直接使用,因为互斥量的申请与释放在类中完成。         这样,我们就完成了计算器类的设计。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iKcamp

翻译连载 | 附录 A:Transducing(上)-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇

原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 JavaScript 轻量级函数...

2138
来自专栏Crossin的编程教室

【Python 第25课】 初探list

昨天课程里的例子有点没说清楚,有同学表示写在程序里发生了错误。因为我当时写这个代码片段时,心里假想着这是在一个函数的内部,所以用了return语句。如果你没有把...

3206
来自专栏landv

C语言介绍

4292
来自专栏司想君

即学即用系列一:纯函数

最近一直在思考如何通过文章或者培训快速提升团队的编码能力,总结下来其实技术的学习分为两类:一种是系统性的学习,比如学习一门语言,学习一个开发框架,这更需要自己从...

2827
来自专栏Flutter入门到实战

封装工厂类创建BottomNavigationBar的addItem

●  工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

972
来自专栏杨建荣的学习笔记

Python代码重构参考

在数据库方向上相对来说能够容易推出开发规范和标准,但是你很少听到公司里面出针对开发同学的开发规范。我觉得其中的一个原因是程序猿比较执拗,以技术服人,经常...

2370
来自专栏C/C++基础

C++0x 通用属性

C++在不断的发展,但每一阶段的C++标准提供的功能都很难完全满足现实需求,于是为了弥补标准的不足或者扩增特性应用场景所需的特性,各大C++编译器厂商多多少少在...

1212
来自专栏海纳周报

【第四期】GC专题

我在某个技术群里发现很多人对GC的问题是最多的。确实,由于Java的GC经常会刷存在感(例如占用大量的CPU时间,full gc时直接失去响应),GC的问题就成...

3689
来自专栏斑斓

编程修炼 | Scala亮瞎Java的眼(二)

继续上一期的话题,介绍Scala有别于Java的特性。说些题外话,当我推荐Scala时,提出质疑最多的往往不是Java程序员,而是负责团队的管理者,尤其是略懂技...

3725
来自专栏互联网开发者交流社区

我个人对OOP的理解

993

扫码关注云+社区

领取腾讯云代金券