POSIX多线程程序设计

所需积分/C币:13 2017-02-26 15:02:35 8.6MB PDF

关于多线程的书籍,值得看看。
Programming B With POsix Threads POSIX 多线程程序设计 美] David r. Butenhoff著 于磊曾刚译 忄图电力出牲 内客提要 枣书深入描述了EE的开放系统接口标难一POⅨX线程,通常称为 Pthreads标准。本 书首先解了线程的苯本概念,包括昇步編程、线程的生命周期和同步机制:然后讨论了 些高級话题,刨括属性对象、线程私有数据和实时谝度。此外,本书还讨论了调魔的间 题,并给出了避免错误和提高性能等问题的有价值的建议。本书使用了大最注秤过的实例 来解实际的概念,并包括 Phread的简单索引和对标准化的展望 本书适合有经验的C语言程序员阅读,也适合多线程编程人员参考 图书在版编目(G|P)数据 POSX多线程程序设计/(美〉布滕霍夫( ButenhotDR)著 于磊,曾刚译.一北京:中国电力出版社,2003 ISBN7-5083-1395-X lP..Ⅱ①布.2②于.③曾..Ⅲ程序设计ⅣTP311 中国版本图书馆CI数据核字(2002)第110540号 蕃作权合同登记号图字:0120020712号 Authorized translation from the English language edition, entitled Programming with POSIX Threads by David R. Butenhif, published by Addisor-Wesley, Copyrighte1997 All rights Reserved. NO part of this book may be reproduced or transmitted in any informaton storage retieval system, without pemission from the Publisher 6, form or by any means, electronic or mechanical, including photocopying, recordi CHINESE SIMPLIFJED language edition published by China Electric Power Press Copyright(2003 本书由培生集团授权出版。 中图电力出版社出版、发行 北京三里河路6号10004hp;www.infopow'et.com.cn) 沂鑫印务有限公司印刷 各地新华书经售 2003年4月第一版2003年4月北京第印刷 787毫米×1092毫米16开本20.75印张505千字 定价3900元 版权所有翻印必究 本书如有印装质量问题,我社发行部负贵退换 予 本书是有关“线程”( thread)和如何使用“线程”的。在计算机中,“线程”是种能 够实现某种功能的基本软件单元。线稈比传统的进程( process)更小巧、更怏捷、更易操作 实际上,一旦在操作系统中引入线程,就可以将进程看作包含了数据地址空间、文件和一个 (或多个)数据处理线程的综合应用。 使用线程构建的应用程序能够更加有效地利用系统资源,使用户的界面更加友好,在多 处理器系统中不但运行十分快速,而且更加易于维护。为达到上述目的,你只需要在程序中 添加相应的几个简单函数调用,即可调整成另一种编程思路。通过仔细阅读本书,我希望能 够帮助你实现上述目标。 本书讲述的线程模型通常被称为 Pthreads,或者 POSIX threads,更正式的名称应该是 POSX1003Lc-1995标准。随后还将提供…些其他的名称,不过目前你只需记住 Pthreads 就够了。 在写木书时,SUN公司的 Solaris、 Digital公司的 Digital UNIX、SG公司的RⅨ已经 支持 Pthreads。其他些主要的商用UN操作系统,像IBM公司的AX和HP公司的 HP-UX,不久也将支持线程模型,也许在你阅读本书的时候已经艾持, Pthread也已经在 Linux 利其他UNIX系统中实现 在个人电脑市场,微软公司的Win32编程接口和IM的OS/2都支持线程编程。这些线 程模型与 Pthreads模型之间存在着定的区别。为了有效地使用它们,首先必须理解并发、 向步和调度等概念,剩下的就是语法和样式的问题,个经验丰富的程序员可以适应这些模 型中的任何一个。 线程模型已经很成功地在应用领域中广泛运用,下面仅是其中的一些 ●有大规模科学计算的程序 能够充分利用多处理器系统的高性能程序和库代码 能被多线程程序使用的库代码 实时应用程序和库代码 对慢速外设(如网络和人类)执行输入输出操作的应用程序和库代码 读者对象 本书适合熟悉在UNX系列操作系统上使用 ANSIC开发代码的高级程序人员阅读,并 不要求具有线程或其他形状异步编程经验。第1章介绍有关概念和术语,使你能够继续阅读 个书后续部分,建议你不要姚过 在阅读过程叶,你将发现关于线程各方面的有趣比喻和实例。最后我希望你能够自已独 立地使用线程编程。好了,祝你线程之旅愉快 关于作者 我从一开始就参与 Pthreads标准的有关T作,虽然最初的次会议我没有参加。最斤, 我被迫在犹他州的雪鸟滑雪场的防雪崩掩体中度过了一周,观看来自世界各地的代表们向他 们」的滑雪板上涂蜡。我本以为这是一个十分正式、乏味的会议,所以我没有带自己的滑雪板, 能租用滑雪设备 在 Pthreads标准最后投票阶段,我同其他几个POSX丁作组设计线程同步接口和多处 呷器应用。我也帮助定义了 Aspen线程扩展规范,该规范辶经成功应用于 X/Open XSH5 伐曾在DEC公圳工作数年,从麻省分部到新罕布什尔州分部,我是DEC公司线程架构 的创始人之,并在 Digital UNIX40.上设计并实现了大部分的 Pthreads线程接口。我还帮 助人们开发、调试线程代码超过八年之久 我的一个不成文的座右铭是“并发使生活更美好"。线程不是面包片,程序员也不是面 包师,所以我们只做能够做的事情。 致谢 可能读者并不关心这部分内容,但确实是我和朋友们以及本书合作者希望见到的。如果 你是一个好奇的读者,请务必读下去。 尽管本书封面只有我一个人的署名,但像本书这样的项目是不可能完全由一个人来完 成的:因为我了解很多线程知识,至少在线程通信方面相当在行,所以我也可能不需任何帮 趴写出-本关于线程的书。但结果是,本书要比假设的那木书更好。 首宄要感谢的是我的经理 Jean fullerton,他给我时闽并鼓励我在工作时写书。感谢DEC threads组的其他同仁,他们是: Brian Keane、 Webb scale、 Jacqueline berg、 Richard loy Peter Portante、 Brian silver、 Mark simons和 Steve johnson。 感谢 Garret swal,当他还在 Digital系统研究中心作时,就让我们了解POSW标准 感谢 Nawaf bitar,他和 Garret一起通宵τ作,实现了 Pthreads的第一个草案,并且不遗余 力地推广POSX线程标准,让每个人都理解线程到底是个什么东西。没有Gare,特别是 如果没有 Nawaf, Pthreads可能不会存在,至少不会像现在这么好(缺乏完美并不是他们的 贡任——生活本来如此)。 感谢参与设计cma、 Pthreads、UNIX98、 DCE threads和 DECthreads的所有人的帮助, 他们是: Andrew birrell、 Paul borman、 Bob Conti、 Bill CoX、 jeff denham、 Peter Gilbert Rick greer mike grier、 Kevin harris、 Ken Hobday、 Mike jones、 Steve Kleiman、 Bob Knighten Leslie lamport、 Doug Locke、 Paula Long、 Finnbarr P. Murphy, Bill Noyce、 Simon patience Harold seigel、 Al Simons、 Jim woodward和 John ZoInowsky 特别感谢所有耐心审阅本书草稿的人们,他们是: Brian Kemighan、 Rich stevens、Dae Brownell、 Bill gallmeister、Ⅱ an Ginzburg、 Will Morse、 Bryan O’ Sullivan、 Bob robillard Dave ruddock和 Bil Lewis。感谢对结构和细节提出改进意见和建议的人们: Devang shah和 Bart smaalders帮助回答了一些有关 Solaris的问题, Bryan O'Sullivan建议使用“舀水的程 序炅”的比喻。 感谢 Addison Wesley longman的 John wait和 Lana langlois,他们耐心地等待并鼓励第 次写书的我努力写好这本书。感谢 Pamela Yee和 rin Sweeney,他们管理了本书的整个 出版过程。感谢所有帮助过我的人们 感谢我的妻子 Anne Lederhos和我的女儿Amy、Ays,感谢她们对我的支持和陪伴。 感谢 Charles dodgson( Lewis carroll),他在其经典小说 Alice' s Adventures in wonderland(《芟 丽丝漫游仙境》)、 Through the looking-glass(《销中漫游》)和 The Hunting of the Snark(《捕 猎蛇鲨》)中写了大量的关于线程编程的事情(译者注:是指小说中描写的多人之间的协调、 并发T作,作者认为与线程间的同步和协调具有相似的含义) 目录 序言 第1章概述, 舀水的程序员 ■昏■!严旱■P严曾晋平平鲁■昏严卜■昏福I4晉昏晉音■七昏↓啬■啬血■山Idd矗m■■hhrt ■■■■■■■■n口p甲p甲 1.2术语定义 1.3异步编程是直观的…… 4关于木书的实例 .10 15异步编程举例.. 16线程的好处 #·即 7线程的代价…. 20 8选择线程还是不用线程 22 19 POSIX线程概念 第2章线程 28 2.]建立和使用线程 28 线程的生命周期 千·個■■t'自···■日卩聊·即·■·■血:·日■■■■甲:■甲·■女如吾h 32 第3章同步 4 D4 37 3.』不变量、临界区和谓词 甲""4+…+血自 37 32互斥量… 38 33条件变量… 甲·甲4 59 34线程间的内存可视性 74 第4章使用线程的几种方式… 4流水线 4.2T作组…. b··中·日日道·早,吾最着4“··『■P1“加avp聊 -.89 43客户/服务器… ↑鲁■·血自血■■■■卩聊■ 第5章线程高级编程. 山■占■ !■■·I自l血■自■■■卩卓卩I■b■晶■〓即聊;4看 51一次性初始化.… 111 52属性 日·日P早曾甲4P4即■會·自温■41即b啁■ ■↓4 114 5.3取消 4郾郾d■ P肀P鲁昏1昏冒計■tlt-山画口ma口 120 54线程私有数据 +137 55实时调度 _l■孟■ 147 56线程和核实体 ,+161 第6章PosⅨ针对线程的调整 167 6.1 fork 4山“●pdp■p←即■事画聊 …”…4,.167 6.2 exec 唱p曲 ■P■幽 173 63进程结束 173 6. 4 stdio 174 65线程安全的函数 178 6.信号 第7章 Real code ■ 1■■■·■·日■平甲■1画 ▲甲■即■备4■占 206 7.1扩展同步 ■■早卩暑4郾 206 7.2工作队列管理器. “F4‘“卜千FL甲目4b4Ib西·1甲4B 23L 73对现存库的处理.… 243 第8章避免调试的提示… ■■L山 …248 81避免不正确的代码… 甲鲁西c 8.2避免性能问题 γ■■■■自■血■■』即看阝b通 4·如·即#4+ ■P會P■■■罪4甲■bDba 259 第9章POsⅨX多线程快速参考. 263 9.pOSK1003.1c-1995选项 263 92 POSIX1003.Ic-1995隔制 264 9.3POSⅨ1003.le-1995接口 265 第10章标准化过程展望 303 10.1X/ Open Xsh5UNI981…… 10.2 POSIX 1003.1 …a……--1,1..31l 10.3 POSIX1003.14, 参考文献 317 因特网上的线程资源 320 概 述 “ gimme has ceme"8 Walrus se To talk of many things: or shoes tind shpsand sealing Wax- and kings And why the sea k boling hok- And whether pigs have wing -lewis Caroll, Through the Looking-Glass 在计算机专用术语中,线程是指机器中连续的、顺序的属性集合。一个线程包 含执行一系列机器指令所必须的机器状态,包括当前指令位置、地址和数据寄存器 等 一个UNIX进程可以理解为一个线程加上地址空间、文件描述符和其他数据。 某些UNX版本支持“轻量级”或“变量级”进程,以便可以从进程中剔除部分或 者所有数据,从而实现高效性能。既然线程和轻量级进程都需要地址空间、文件描 述符等数据,那么区别何在?区别在于多个线程可以共享一个地址空间,而做不同 的事情。在多处理器系统中,一个进程中的多个线程可以同时做不同的T作。 当计算机还活在玻璃洞穴中时(译者注:指计算机发展初期),需要处理事先 准备好的穿孔卡片。整个外部世界都在等待计算的结果,顶多可能听到程序员的抱 怨声。但是外部世界并不是一次只做ˉ件事情,逐渐地,计算机开始模拟这种实际 模式,增加多程序设计、多重处理、分时共享、多处理器系统的能力,最终,实现 了线程。 线程能够帮助你的应用程序走出洞穴。 Pthreads则能帮助你以一种优雅、高效 可移植的方式完成这个「作。本章简单介绍理解和使用线程所需要的基本知识,其 他章节则会针对各个环节做进一步的详细解释。 1节给出了包含多个比喻的故事,以此说明线程的作模式。这个故事并没 有什么特别的,但在你理解我所讲的程序员和水桶的含义之前,可能显得有点怿 12节给出了本书使用的基木概念和术语。其中最重要的一个概念需要在此特 别介绍,也与全书会对一些重点特别强调的习惯是一致的: 异步: 任何两个彼此独立运行的操作是异步的

...展开详情
img
siyelangshao

关注 私信 TA的资源

上传资源赚积分,得勋章
最新资源