C++面向对象多线程学习笔记_类层次和线程处理C++组件

类层次(class hierarchy)是一些通过继承(inheritance)相关联的类的集合。它的一些常见类类型有:

*抽象基类;

*具体类;

*节点类;

*接口类;

*容器和集合类;

*应用框架类;

*域类。

1. 抽象基类

抽象基类为所有后代提供蓝图,它作为从它派生的所有类的一套原则和接口策略。为了使用抽象类,用户必须首先从基类派生出一个新类,并为抽象类中声明的所有纯虚函数提供实际的定义。抽象类在C++语言结构中的身份是纯虚函数,对于一个抽象类,它必须至少有一个纯虚函数。

2. 具体类

具体类作为纯结类来设计和实现。它表示祖先-后代世系中的结束。它没有虚函数,不打算用来被继承,只是按现在的样子进行直接使用。

2.1 节点类:

它提供继承和多态的基础。与抽象基类一样,节点类设计用于被继承,但它不包含纯虚函数。节点类可以立即使用,不过节点类的设计还同时着眼于未来,它的设计具有可重用性,同时提供可以在派生类中覆盖的虚成员函数。它还提供可以被派生类继承的受保护数据成员和成员函数。它使用基类的指针和引用使得可以操纵后代类中的成员函数。

2.2 线程与容器和集合类

与大部分C++组件类型一样,在多线程程序中,集合和容器类与线程交互的主要途径有两种:

*线程间通信;

*多线程服务器。

与一般情况下将数据结构用作多个进程间通信机制相比,使用面向对象组件进行线程间通信具有巨大的优点。进程间的数据通信通常位于线性数据结构中,例如队列和管道中。这些数据结构没有提供图表、集和映射所提供的表达力。当在进程间传递数据时,程序员被迫将通信看作多个进程间的一种简单线性数据或消息交换。

多线程类的简单架构:

为了设计多线程类,我们至少需要6个基本组件:

a.宿主类(host class);

b.线程类(thread class);

c.互斥和事件类(mutex and event class);

d.友元成员函数(friend member function);

e.域类(domain class);

f.强制转换基本元素(casting primitive)。

宿主类是用户与之交互的类。有两种常用的多线程宿主类。第一种类型是多线程应用程序框架;第二种类型是多线程服务器。宿主类被分解成两个或更多的线程,每个线程执行宿主类的一个友元函数。当执行友元函数时,宿主类将this指针作为一个参数传递给该线程。this指针在友元函数中被强制转换成指向适当类型的类。this指针形成了宿主类与位于另一个线程中的域类间的线程间通信。每个友元函数将创建一个或多个域对象来完成线程的请求。

2.3 应用框架类

在所有能够以软件重用为目标构建的面向对象组件中,也许面向对象应用框架最难以构建,但一旦构建后却能提供最大好处的组件。与容器类、集合类以及类型的类层次相比,应用框架一般情况下是最易于理解的面向对象类层次。但它又是最难以构建的类层类,因为它们为思想建模。也就是说,应用框架为对象交互、工作模式、动作序列、软件事务以及进程内容来建模。

应用框架为一般性面向对象应用。这个框架以类层次的形式捕获应用具有的动作、工作模式和处理内容的序列。它用作整个应用的模式,具体化应用具有的基础结构或骨架,而没有提供应用的细节。它指定了面向对象架构中软件部分间的关系、责任和协议。

应用框架的目标是成功一般化工作模式。应用框架的设计需要对软件分解有一个全面的理解,因为设计者必须将框架分解成提供者实现和客户实现部分。在多线程应用框架中,框架执行的工作模式必须分解成一套线程。框架的实质是需要分解成它的一般性部分以及特定应用的部分。

应用框架由相关类的集合组成。它的成员函数有一个预设计的、内置的交互模式这套相关类和预设计交互模式为程序员提供一些一般性问题的特定解决方案。

应用框架总是至少分解为两个主要组件。第一个组件为框架设计者提供的框架部分。这个组件包含按一般性方式捕获的特定动作序列以及对象间的关系,它表示某问题类别的一种常用解决方案。第二个组件称做ensemble,它具体表现域知识、专家知识、规则以及特定解决方案的策略。ensemble由框架的用户提供,而框架本身提供了应用的形式,ensemble提供应用的具体内容。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容