新手学C++多线程编程(1)组件

来源:互联网 发布:c语言数据类型举例 编辑:程序博客网 时间:2024/06/05 23:47

新手学C++多线程编程(1)

转载

C++多线程编程(1)

 C++组件


 1.多任务处理:允许同一时刻执行多个进程
   多线程处理:允许一个进程在同一时刻执行多个任务。
   线程:单个进程中执行的每个任务
   多线程化:当一个进程使用了多个线程
   多线程编程带来表现力和操作性能好处的同时,死锁无限延迟以及数据竞争这些不利因素总是威胁着某些应用程序,使他们出现意外不正常终止。

 

2.在面向对象应用程序中使用多线程的最有效途径:
  通过构建于C++进程间通信组件(IPC)、同步和互斥组件最有效途径是构建接口类(interface) 和类库(class library),让它们封装提供线程和API任务的操作系统服务。

 

3.在C++中,面向对象架构构建于C++组件。 
  C++组件相比C的优势在于支持封装(encapsulation)、继承(inheritance)、多态(polymorphism)、参数化类型(parameterized type)

 

4.组件接口:能够被外界使用的数据和服务。C++组件虽然是独立的,但不能单独作为一个完整的程序或应用,而是用于构建应用于多目的、多种类应用以及可能无限制组合体的一般性软件部分。
 常用C++组件[开发基石]:类(class)、集合和容器(collection and container)、类库(clas library)、应用框架(application framework)
  【注意】类组件是所有其他C++组件的基础。

 

5.软件模型两种主要类型:
 (1)过程、概念或思想的放大表示,用于分析或试验。
 (2)用软件对某些现实任务、过程或思想的再现。
    实现抽象数据类型的类和作为模型的类之间的区别:数据类型用于支持编程工作,实现类的功能;
 而C++类用作模型时,类通常是编程过程最终结果,或表示最终结果架构的重要部分。他不仅仅是一种数据类型。模块化类实际作为现实人物、地点、事件或思想的替身。

 

6.常用类类型(8种):
(1)具体类(concrete class):子承父业的独立终止类
(2)抽象类(abstract class):为子类提供布局和蓝图的基类,必须派生新类来声明对象,需声明纯虚函数
(3)接口类(interface class):为非面向对象代码和数据提供面向对象性用来封装独立函数,修改或增强
(4)节点类(node class):提供继承和多态基础;不包含纯虚函数。
(5)支持类(support class):不管在任何域内,对于不同的应用都非常有用。
(6)域类(domain class):创建类在指定域内模拟部分现实或实体。
(7)应用类(utility class):不管在任何域内,对于不同的应用都非常有用。
(8)集合容器类(collection and container class):其他对象组的通用容纳器。
 常用类类型用于实现逻辑类的技术,并非特定语言结构。
  
7.纯虚函数声明:virtual void function(void)=0;
  有纯虚函数的类不能用于创建运行时对象,用户必须派生一个子类,并为抽象基类声明的每个虚函数提供函数定义。如果子类只实现了其中一个纯虚函数,那么子类也将被认为是一个抽象类。
  纯虚函数充当实现策略。

 

8.私有数据成员及成员函数(private)不能被非该类成员函数所访问,且不能被继承。不是类接口一部分。
  受保护数据成员及成员函数(protected)可被任何子类访问,仅为父类和家族子类提供受保护接口。
  公有数据成员及成员函数(public)可被任何人访问,提供了类的开放的公有接口。

 

9.接口类:用于修改和增强完善另一个类或类集合的接口。典型应用:容器适配器(container adaptor),它是标准模板库STL的一部分。

 

10.节点类:
   节点类是继承和多态的基础。设计用于继承,但不包含纯抽象虚函数,可即时使用,可被设计成可重用类。节点类可以是基类,也可以是派生类。

 

11.域类:创建用来模拟指定域内实体的类。域类与编程支持类、用户接口类或数据库类完全分离,除非该域为系统编程。它可以抽象基类、具体类或节点类。

 

12.支持/应用类:与域无关,可跨域使用。如日期/时钟类或计量。另一种是用户接口类,如列表框类或滚动条类。

 

13.集合和容器类:操纵不同种类或相同种类的对象组。用于管理对象组的方式与传统数组管理传统数据类型(如整型或字符型等)的方式是一样的。集合和容器类可以用于实现域类。
   实现集合和容器类的2个途径:基于对象途径(依赖多态和继承,纵向结构)、基于模板途径(依赖C++中模板结构的一般性功能和参数化编程、FAT接口,横向结构)。
   NIH类库:集合和容器对象直接或间接访问 class Object 的后代并派生于类Collection
   class rational:public Object{};

   class collection
   { protected:
          int Size;
     public:
          collection(int sz){Size=sz};
          virtual void insert(Object & X)=0;
          virtual int size(void)=0;
          virtual int empty(void)=0;
   };
  
   class Vector:public collection
   { protected:
         Object *V;
         int Pos;
     public:
         vector(int Sz);
         ~vector(void);
         void insert(Object *X);
         int size(void);
         int empty(void);
         Object operator[](int N);
   }

STL模板参数化: vector Myvector;
缺点:STL不是多线程化的,所以在多线程架构中使用STL时要小心谨慎。


14.在一个具有面向对象架构的应用之内,建议用应用框架解决所有多线程问题。与域类一起,多线程应用框架必须正确使用互斥类和IPC类来提供支持并发和多进程的软件基础。

下图是多线程架构图:

C++多线程编程(1)C++组件

原创粉丝点击