C++面向对象多线程编程
[特价中]基本信息
内容简介回到顶部↑
全书共分13章,全面讲解构建多线程架构与增量多线程编程技术。第1章介绍了用于构建面向对象程序的不同类型C++组件,以及如何使用这些组件来构建多线程架构。第2、3、4章简要介绍进程、线程、多任务处理、多线程化、规划以及线程优先权的概念。第5章讨论进程间和线程间通信。第6章讨论线程与进程同步与合作。第6章详细讨论临界区、死锁、数据竞争以及无限延迟方面的主题。第7~10章讲解用于线程同步、线程间通信、进程间通信以及多线程处理的C++组件。第11章讨论C++对象在多线程环境中的行为和交互方式。第12章简单介绍多线程应用程序的测试技术。第13章对全书内容进行扼要地回顾与思考。
本书适合用C++创建多线程组件和应用框架的程序员阅读。
本书适合用C++创建多线程组件和应用框架的程序员阅读。
作译者回到顶部↑
本书提供作译者介绍
周良忠,男,1970年生。本科毕业于武汉化工学院计算机应用专业。1995年毕业于中国科学院武汉岩土力学研究所,获硕士学位,1997年获得博士学位。1998年创办云颠工作室(http://www.cloudcrown.com),为个人、中小企业提供专业软件定做服务。近几年开发了多款广受欢迎的共享软件。精通C++、C#、Java、Perl等开发语言。2001年开始从事计算机科技图书的创作和翻译工作,最新翻译力作有《c# Primer Plus中文版》、《c++实践之路》等。
.. << 查看详细
.. << 查看详细
目录回到顶部↑
第1章 c++组件简介 1
1.1 既是好消息,也是坏消息 1
1.2 面向对象方法 2
1.3 面向对象架构 2
1.4 c++组件 3
1.5 面向对象软件组件 3
1.5.1 什么是类 4
1.5.2 抽象数据类型 4
1.5.3 类作为模型 8
1.5.4 类类型 9
第2章 进程解剖 25
2.1 什么是进程 25
2.2 进程状态 28
2.3 进程优先权 34
2.4 上下文切换 35
2.5 进程关系 35
2.5.1 进程终止 39
2.5.2 同步和异步进程 39
2.6 进程映射 41
2.7 进程资源 42
1.1 既是好消息,也是坏消息 1
1.2 面向对象方法 2
1.3 面向对象架构 2
1.4 c++组件 3
1.5 面向对象软件组件 3
1.5.1 什么是类 4
1.5.2 抽象数据类型 4
1.5.3 类作为模型 8
1.5.4 类类型 9
第2章 进程解剖 25
2.1 什么是进程 25
2.2 进程状态 28
2.3 进程优先权 34
2.4 上下文切换 35
2.5 进程关系 35
2.5.1 进程终止 39
2.5.2 同步和异步进程 39
2.6 进程映射 41
2.7 进程资源 42
前言回到顶部↑
这是一本讲解用于生成可以同时执行多个任务的程序与应用的面向对象C十十组件构建的参考书。本书着重讲解支持多线程和并发处理的软件生成机制。本书推荐使用那些能自然适应于并行性的软件架构。本书所讲授的知识与软件“分治(divide and conquer)”技术有关。
学习本书的必要性
当今的应用程序既需要大量的CPU时间,又依赖于高流量I/O。用户不再满足于一次只执行一个任务的应用了。像Web浏览器这样支持上载与下载的应用程序必须允许用户在上载或下载的同时还能够撰写E-mail消息,或者阅览文档。电子数据表必须允许用户在浏览其中一部分占用大量处理器时间的图形的同时,还能执行另一部分冗长的计算。当今的许多应用程序都包含与声音同步的视频序列。视频序列的解码程序必须能够压缩或解压视频,同时要让视频图像与保存在视频图像中的声音数据同步。用户不能容忍无声的视频或只有声音没有图像的视频效果。假如字处理程序正在打印一份长文档的时候,用户不能编辑另外的文件,这是不可接受的。用户不会使用不能同时搜索和排序的数据库应用程序。如果某应用程序包含通信功能、打印功能、数据库功能、数值计算功能等等,用户希望能够并发执行其中的某些功能。一次只做一件事的日子已一去不复返了。我们需要那些可以让我们构建满足用户需求的应用程序的技术。我们需要那些可以让我们解决搜寻互联网上数据时所出现问题的技术。我们需要的是能应付处理器,而且能满足高流量I/O多媒体需求的技术和架构。
发展趋势
与之相应,应用程序的发展趋势就是让应用程序多线程化。多线程化应用程序是那些将任务分成多个线程的应用程序。这些线程就像工人一样。在单线程应用程序中,只有一个工人完成应用程序将要满足的请求。如果用户发出多个请求,用户必须等待应用程序的唯一工人逐个地完成所有请求。不过,在多线程应用程序中存在多个工人。不仅有多个工人,而且这些工人还可以同时执行他们的功能。可分配工人组来共同完成一项任务,同时分配其他工人独立完成其他任务。在多线程应用程序中,将应用程序执行的任务分配给并发执行的工人集合,它们称做线程。如果用户发出了多个请求,这些请求可以同时得到满足,因为可以分派每个工人来满足用户请求的某一部分。因为应用程序具有多个工人,所以工人可以并发满足多个请求。当应用程序包含多个线
程时,该应用程序就是多线程处理的。
存在的难题
尽管多线程处理应用程序可以用来提高用户的生产力,也能加速程序的运行,但也存在许多缺陷。当应用程序拥有多个工人时,由谁来协调这些工人呢?如何将应用程序的功能性在这些工人间进行分派?哪一个工人在何时用多长时间来完成哪一项任务?谁首先启动?谁最后结束?如果有个工人的任务执行失败了,将会发生什么情况呢?如果工人混淆了信号与优先权,情况将如何?因为多线程程序可能包含上百,有时是上千个线程,所以我们可能应验这句谚语:人多误事(Too many cooks spoil the stew)。也就是说,太多的工人可能导致应用程序执行迟缓,甚至被锁住。有时,工人间为谁首先使用特殊的资源而相互竞争。两个工人可能同时想发送不同的声音、图像或视频文件到同一个多媒体设备。一个工人可能想打开开关,而另一个工人却同时想关掉此开关。
在一个应用程序中分派多个工人时可能遇到的难题有:
● 死锁;
● 数据竞争;
● 优先权倒置;
● 无限延迟。
这些难题是在构建多线程程序时必须避免的缺陷。它们带来了程序员经常要逾越的障碍。程序员通过一套构建完美的面向对象技术,可以获得设计和编写中到大型单线程应用程序的指导方针,但对于多线程应用程序,却没有这样的指导方针。软件开发者在构建多线程程序时通常要反复排除。构建包含多个线程的程序,没有好的蓝图必定导致灾难。甚至一个典型的中型单线程应用程序可能有上百个组件,每个组件由上千行代码组成。如果我们可以让所有组件协同工作而不发生故障,我们就可以判断该任务可以圆满完成。对于同样的中型应用程序,如果我们添加多个线程,我们通常会带来极大的复杂性。我们的目标可能只是加速应用程序,或者让它更符合用户的需要,但我们反而创建了一个脆弱的应用程序,容易遭受不可预测的崩溃,而且不可能对它进
行维护。
解决方案
我们使用C++组件来消除编写多线程程序时遇到的缺陷。我们通过面向对象技术来实现多线程应用程序。本书讨论用一种架构途径来构建多线程应用程序,还解释了如何构建用于实现支持并发的软件机制的C++组件。本书讨论的这类软件机制有:
学习本书的必要性
当今的应用程序既需要大量的CPU时间,又依赖于高流量I/O。用户不再满足于一次只执行一个任务的应用了。像Web浏览器这样支持上载与下载的应用程序必须允许用户在上载或下载的同时还能够撰写E-mail消息,或者阅览文档。电子数据表必须允许用户在浏览其中一部分占用大量处理器时间的图形的同时,还能执行另一部分冗长的计算。当今的许多应用程序都包含与声音同步的视频序列。视频序列的解码程序必须能够压缩或解压视频,同时要让视频图像与保存在视频图像中的声音数据同步。用户不能容忍无声的视频或只有声音没有图像的视频效果。假如字处理程序正在打印一份长文档的时候,用户不能编辑另外的文件,这是不可接受的。用户不会使用不能同时搜索和排序的数据库应用程序。如果某应用程序包含通信功能、打印功能、数据库功能、数值计算功能等等,用户希望能够并发执行其中的某些功能。一次只做一件事的日子已一去不复返了。我们需要那些可以让我们构建满足用户需求的应用程序的技术。我们需要那些可以让我们解决搜寻互联网上数据时所出现问题的技术。我们需要的是能应付处理器,而且能满足高流量I/O多媒体需求的技术和架构。
发展趋势
与之相应,应用程序的发展趋势就是让应用程序多线程化。多线程化应用程序是那些将任务分成多个线程的应用程序。这些线程就像工人一样。在单线程应用程序中,只有一个工人完成应用程序将要满足的请求。如果用户发出多个请求,用户必须等待应用程序的唯一工人逐个地完成所有请求。不过,在多线程应用程序中存在多个工人。不仅有多个工人,而且这些工人还可以同时执行他们的功能。可分配工人组来共同完成一项任务,同时分配其他工人独立完成其他任务。在多线程应用程序中,将应用程序执行的任务分配给并发执行的工人集合,它们称做线程。如果用户发出了多个请求,这些请求可以同时得到满足,因为可以分派每个工人来满足用户请求的某一部分。因为应用程序具有多个工人,所以工人可以并发满足多个请求。当应用程序包含多个线
程时,该应用程序就是多线程处理的。
存在的难题
尽管多线程处理应用程序可以用来提高用户的生产力,也能加速程序的运行,但也存在许多缺陷。当应用程序拥有多个工人时,由谁来协调这些工人呢?如何将应用程序的功能性在这些工人间进行分派?哪一个工人在何时用多长时间来完成哪一项任务?谁首先启动?谁最后结束?如果有个工人的任务执行失败了,将会发生什么情况呢?如果工人混淆了信号与优先权,情况将如何?因为多线程程序可能包含上百,有时是上千个线程,所以我们可能应验这句谚语:人多误事(Too many cooks spoil the stew)。也就是说,太多的工人可能导致应用程序执行迟缓,甚至被锁住。有时,工人间为谁首先使用特殊的资源而相互竞争。两个工人可能同时想发送不同的声音、图像或视频文件到同一个多媒体设备。一个工人可能想打开开关,而另一个工人却同时想关掉此开关。
在一个应用程序中分派多个工人时可能遇到的难题有:
● 死锁;
● 数据竞争;
● 优先权倒置;
● 无限延迟。
这些难题是在构建多线程程序时必须避免的缺陷。它们带来了程序员经常要逾越的障碍。程序员通过一套构建完美的面向对象技术,可以获得设计和编写中到大型单线程应用程序的指导方针,但对于多线程应用程序,却没有这样的指导方针。软件开发者在构建多线程程序时通常要反复排除。构建包含多个线程的程序,没有好的蓝图必定导致灾难。甚至一个典型的中型单线程应用程序可能有上百个组件,每个组件由上千行代码组成。如果我们可以让所有组件协同工作而不发生故障,我们就可以判断该任务可以圆满完成。对于同样的中型应用程序,如果我们添加多个线程,我们通常会带来极大的复杂性。我们的目标可能只是加速应用程序,或者让它更符合用户的需要,但我们反而创建了一个脆弱的应用程序,容易遭受不可预测的崩溃,而且不可能对它进
行维护。
解决方案
我们使用C++组件来消除编写多线程程序时遇到的缺陷。我们通过面向对象技术来实现多线程应用程序。本书讨论用一种架构途径来构建多线程应用程序,还解释了如何构建用于实现支持并发的软件机制的C++组件。本书讨论的这类软件机制有:
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· C/C++ 经典著作(《C专家编程》《C++ Templates中文版》《C和指针 》《C陷阱与缺陷》《C++沉思录》)
评论交流
共有28人开贴评论 53人参与评论 21人参与打分 查看
发表于:2006-12-24 16:30:00
如果上天再给我一次机会,即便是白送我也不会要这本书。很可惜当时没仔细看, 居然还掏钱买了本书,并且还花时间去看它。
很奇怪这样烂的书竟也能飘洋过海来到中国,更奇怪这么烂的书在 china-pub 上 还有人给它五星。
与市面上大多数翻译版的书相反,本书烂本不是烂在翻译上(当然其中有些明显的 错误不论是否原文如此,译者没改正就有责任),而是本书原本就没有任何有价值 的内容。前几章东拉西扯的说了一堆最最基本的知识,感觉像是在凑篇幅。然后是 用C++对线程函数进行封装竟然,而这本身技术含量少的可怜,一句话就可以概括, 那就是 Bjarne Stroustrup 的 “Resource Acquisition Is Initialization”。 这么简单的内容居然也好意思拼凑成书,那是不是我改天我把我封装的 socket 函 数代码列出来也就可以出本《C++ Socket 编程》?
对我来说本书唯一的价值就是让我意识到引进版的书也有很垃圾的。
对于想学习多线程(进程)编程的朋友,我推荐《UNIX网络编程卷2:进程间通信》 (英文影印版)。该书虽然名为进程间通信,但是其中也包括了线程间的通信。
很奇怪这样烂的书竟也能飘洋过海来到中国,更奇怪这么烂的书在 china-pub 上 还有人给它五星。
与市面上大多数翻译版的书相反,本书烂本不是烂在翻译上(当然其中有些明显的 错误不论是否原文如此,译者没改正就有责任),而是本书原本就没有任何有价值 的内容。前几章东拉西扯的说了一堆最最基本的知识,感觉像是在凑篇幅。然后是 用C++对线程函数进行封装竟然,而这本身技术含量少的可怜,一句话就可以概括, 那就是 Bjarne Stroustrup 的 “Resource Acquisition Is Initialization”。 这么简单的内容居然也好意思拼凑成书,那是不是我改天我把我封装的 socket 函 数代码列出来也就可以出本《C++ Socket 编程》?
对我来说本书唯一的价值就是让我意识到引进版的书也有很垃圾的。
对于想学习多线程(进程)编程的朋友,我推荐《UNIX网络编程卷2:进程间通信》 (英文影印版)。该书虽然名为进程间通信,但是其中也包括了线程间的通信。
| 我要写评论 |
| 查看所有评论交流(共28条) |


点击看大图






加载中...
