经典的POSIX多线程程序设计,在POSIX系统下进行C/C++多线程编程必看的一本书。
本书的读者对象是有C/C++编程基础,但是没有线程知识。
本书按照章节,由浅入深,从基本的线程概念,到线程私有数据,实时调度,再到barrier,读写锁,工作队列管理器,并且配合大量注释和实例来演示。
ProgrammingWithPOsiXThreadsPOSIX多线程程序设计[美]Davide.Butenhoff著于磊曾刚译忄因电力出照内容提要枣书深入描述了TEE的开放系统接可标准一POSIX线程,通常称为Pthreads标准。
本书首先解释了线程的基本概念,每括异步编程、线程的生命周期和间步机:然后讨论了些高絞话题,包括属性对象、线程私有数据和实时调度。
此外,本书还讨论了调度的阿题,并给出了避免错误和提髙性能等问题的有价值的建议。
本书使用了大量注释过的实例来解轟实际的概念,并包括Phed的简单索引和对标准化的晨望本书遁合有经验的C语言程序员阅读,也适合多线程编程人员参考纽书在版编目(C|P)数据POSⅨ多线程程序设计/(美)布滕霍夫(Butenhoff,R》著:于磊,曾刚译.一北京:中国电力出版社,2003ISBN75083-1395-XIP..Ⅱ①布②于③曾.,Ⅲ程序没计Ⅳ.TP3111中国版本图书馆CP数据核字(202)第110540号蕃作权合同登记号图字:01-20020712号AuthorizedtranslatlonfromtheEnglishlanguageedion,entitledProgrammingwithPOSIXThreadsbyDavidA.Butenhof,publy,Copyrighto1997Allrightsreserved.Npartofthisbookmaybereproducedortransmittedinanyformorbyanymeans,electronicormechanical,includingphotocopying,recordingotbyanyinfomationstorageretrievalsystem,withoutpermissionfromthePublisher.CHINESESiMPLIFIEDlanguageeditionpublishedbyChinaElectricPowerPressCopyright的2003本书由培生集团授权出版。
中国电力出版社出版、发行北京三里河路6号100044httpf/wwwinfopuw'er.com.cn汇鑫印务限公司印刷各地新华书店经2003年4月第一版2003年4月北京第印刷787毫米×102毫米16开本20.75印张505千字定价890元版权所有翻即必究〔本书如有印装质量问题,我社发行部负责退换予本书是有关“线程”(thread)和如何使用“线程”的。
在计算机中,“线程”是种能够实现某种功能的基本软件单元。
线稈比传統的进程process)更小巧、更怏捷、更易操作实际上;一旦在操作系统中引入线程,就可以将进程看作包含了数据地址空间、文件和一个(成多个)数据处理线程的综合应用使用线程构建的应用程序能够更加有效地利用系统资源,使用户的界面更加友好,在多处理器系统中不但运行十分快速,而且更加易于维护。
为达到上述目的,你只需要在程序中添加相应的几个简单函数调用,即可调整成另一种编程思路。
通过仔细阅读本书,我希望能够帮助你实现上述目标本书讲述的线程模型通常被称为Pthreads,或者POSIXthreads,更正式的名称应该是POSX1003.le-1995标准。
随后还将提供丶些其他的名称,不过目前你貝需记住Pthreads就够了。
在写本书时,SUN公司的Sola,Dga公司的DigitalUNIX、SGI公司的RX已经支持Pthreads。
其他一些主要的商用UNⅹ操作系统,像IM公司的AX和HP公的HPUX,不久也将支持线程模型,也许在你阅读木书的时候已经丈持Pthreads也已经在Linux利其他UNX系练中实现在个人电脑市场,做软公司的Wn32编程接口和BM的Os12都支持线程编程。
这些线程模型与Pthreads模型之间存在着一定的区别。
为了有效地使用它们,首先必须理解并发、同步和调度等概念,剩下的航是语法和样式的问题,个经验丰富的程序员可以适应这些模型中的任何一个线程模型已经很成功地在应用领域中丿泛运用,下面仅是其中的一些:●有大规模科学计算的程序能够充分利用多处理器系统的高性能程序和库代码能被多线程程序使用的库代码●实时应用程序和库代码●对慢速外设〔如网络和人类)执行输入输出操作的应用程序和库代码读者对象4书适合熟悉在UNX系列操作系统上使用ANSIC开发代码的高级程序人员阅读,并不要求具有线程或其他形状异步编程经验。
第1章介绍有关概念和术语,使你能够继续阅读个书后续部分,建议你不要跳过。
在阅读过程屮,你将发现关于线程各方面的有趣比喻和实例。
最后我希望你能够自已独地使用线程编程。
好了,祝你线程之旅愉快。
关于作者我从一开始就参与Pthreads标准的有关丁作,虽然最初的儿次会议我没有参加。
最后,我被迫在犹他州的雪鸟滑雪场的防雪崩掩体中度过∫一周,观看来自世界各地的代表们向他们」的滑雪板上涂蜡。
我本以为这是一个十分正式、乏味的会议,所以我没有带自己的滑雪板,只能租用滑设备在Pthreads标准最后投票阶段,我同其他几个POSIX丁作组设计线程同步接口和多处理器应用。
我也帮助定义了Aspen线程扩展规范,该规范让经成功应用于X/OpenXSH5我曾在DEC公可工作数年,从麻省分部到新罕布什尔州分部。
我是DEC公司线程架构的创始人之…,并在DigitalUNIX4..上设计并实现了大部分的Pthreads线程接口。
我还帮助人们开发、调试线程代码超过八年之久。
我的一个不成文的座右铭是“并发使生活更美好"。
线程不是面包片,程序员也不是面包师,所以我们只做能够做的事情致谢可能读者并不关心这部分内容,但确实是我和朋友们以及本书合作者希望见到的。
如果你是一个好奇的读者,请务必读下去尽管本书封面上只有我一个人的署名,但像木书这样的项目是不可能完全由一个人来完成的。
因为我了解很多线程知识,至少在线程通信方面相当在行,所以我也可能不需任何帮眇与出…本关于线程的书。
但结果是,本书要比假设的那木书更好。
首先要感谢的是我的经理Jeanfullerton,他给我时间并鼓励我在τ作肘写书。
感谢DECthreads组的其他同仁,他们是:Briankeane、Webbscales、JacquelineBerg、Richardlove、PeterPortante、BrianSilver、Marksimons和Stevejohn感谢GarretSwart,当他还在Digital系统研究中心工作时,就让我们了解POSX标准感谢Nawafbitar,他和Garret一起通宵T作,实现了Pthreads的第一个草案,并且不遗余力地推广POSIX线程标准,让每个人都理解线程到底是个什么东西,没有Garret,特别是如果没有Nawaf,Pthreads可能不会存在,至少不会像现在这么妤(缺乏完美并不是他们的责任——生活本来如此)感谢参与设计cma、Pthreads、UNX98、DCEthreads和DECthreads的所有人的帮助他们是:AndrewbirrellPaulborman、BobConti、BillCox、Jeffdenham、Petergilbert、Rickgreer、Mikegrier、KevinHarrisKenHobday、Mikejones、Steveneiman、BobKnighten、Leslielamport、DougLocke、Paulalong、Finnbarrp.Murphy、BillNoyce,Simonpatience、Haroldseigel、AlSimons、Jimwoodward和Johnzolnowsk特别感谢所有耐心审阅本书草稿的人们,他们是:BrianKemighan、Richstevens、DaveBrownell.billgallmeister、lanGinzburg、WillMorse、BryanO'Sullivan、BobrobillardDaveruddock和BilLewis。
感谢对结构和细节提出改进意见和建议的人们:Devangshah和BartSmaalders帮助回答了一些有关Solaris的问题,BryanO'Sullivan建议使用“舀水的程序员”的比喻感谢AddisonWesleylongmanF]JohnWait和Lanalanglois,他们耐心地等待并鼓励第次写书的我努力写好这本书。
感谢PamelaYee和ErinSweeney,他们管理了本书的整个出版过程。
感谢所有帮助过我的人们。
感谢我的妻子Annelederhos和我的女儿Amy、Alyssa,感谢她们对我的支持和陪伴。
感谢Charlesdodgson(Lewiscarrol),他在其经典小说Alice'sAdventuresinwonderland〈《艾丽丝漫游仙境》)、Throughthelooking-Glass(镜中漫游》)和TheHuntingoftheSnark(《捕猎蛇鲨》)中写了大量的关于线程编程的事情(译者注:是指小说中描写的多人之间的协调、并发T作,作者认为与线程间的同步和协调具有相似的含义)。
序言第1章概述….舀水的程序员幽···血幽噜血■■■自■■■口■平■_■平L·昏■昏罾早平■卩卩甲罾警肀昏罾昏4平平昏罾1昏昏昏1斷■昏1■昏晋11山翟■如■西d旷■晶旷hanm12术语定义…13异步编程是直观的…4关于木书的实例…5异步编程举例16线程的好处7线程的代价08选择线程还是不用线程2219POSIX线程概念第2章线程甲pd21建立和使用线程22线程的生命周期曾■T會32第3章同步…373.1不变量、临界区和谓词甲罪卩↓卩郾■郾看郾↓·T3互斥量3833条件变量…5934线程间的内存可视性第4章使用线程的几种方式∴…4.流水线1甲■曾昏個昏■18142T作组8943客户/服务器第5章线程高级编程5-次性初始化n11152属性11453取消.12054线程私有数据13755实时调度量鲁备14756线程和核实体16第6章POSX针对线程的调整1676.1fork昏山t1山h,,1.1676.2e7363进程结束6.4stdiolt鲁·TTP日■日白'自甲1甲即甲目日血!‘=P平■昏■■Ida=t1765线程安全的函数l7866信号P■昏182第7章Realcode………,…,,,4---.2067.1扩展同步鲁11自會■■p看p山山血即■晷着甲4■20672工作队列管理器『甲目目·由即?日甲■1晶吾hmpp唱p血命血』甲■品甲“■2373对现存库的处理……243第8章避免调试的提示■着酽eskd24881邐免不正确的代码.24982避免性能问题didP曾1血自幽甲p甲助D口1259第9章PoSⅨ多线程快速參考2639.1POSIX10031c-1995选项血·=F■山lF4·P甲Ia26392POSⅨX1003.1c-l995限制.2649.3POSⅨX1003lc-1995接口265第10章标准化过程展望30310.1X/OpenXSH5[UNIX98]102POSⅨX10031…鲁4P日命·h.44即4日4·-T血d哪甲‘4品=F4目“!31110.3POSX1003.14参考文献…",…4…-.17因特网上的线程资源320概述hetimehascome,theWalrussaldrotalkofmarythings,OrshoesaindshipsandsealingWaxoandkingsAndwhythe鵡boinghoAndwhetherpigshavewings-ewisCarrol,Throughthelooking-Glass在计算机专用术语中,线程是指机器中连续的、顺序的属性集合。
一个线程包含执行一系列机器指令所必须的机器状态,包括当前指令位置、地址和数据寄存器等。
个UNX进程可以理解为一个线程加上地址空间、文件描述符和其他数据。
某些UNⅨX版本支持“轻量级”或“变量级”进程,以便可以从进程中剔除部分或者所有数据,从而实现高效性能。
既然线程和轻量级进程都需要地址空间、文件描述符等数据,那么区别何在?区别在于多个线程可以共享一个地址空间,而做不同的事情。
在多处理器系统中,一个进程中的多个线程可以同时做不同的T作当计算机还活在玻璃洞穴中时(译者注:指计算机发展初期),需要处理事先准备好的穿孔卡片。
整个外部世界都在等待计算的结果,顶多可能听到程序员的抱怨声。
但是外部世界并不是一次只做-件事情,逐渐地,计算机开始模拟这种实际模式,增加多程序设计、多重处理、分时共亨、多处理器系统的能力,最终,实现了线程线程能够帮助你的应用程序走出洞穴。
Pthreads则能帮助你以-种优雅、高效、叮移植的方式完成这个厂作。
木章简单介绍理解和使用线程所需要的基本知识,其他章节则会针对各个环节做进一步的详细解释1.1节给出了包含多个化喻的故事,以此说明线程的工作模式。
这个故事并没有什么特别的,但在你理解我所讲的程序员和水桶的含义之前,可能显得有点怿12节给出了本书使用的基本概念和术语。
其中最重要的一个概念需要在此特别介绍,也与全书会对一些重点特别强调的习惯是一致的异步任何两个彼此独立运行的操作是异步的
2025/3/19 2:20:31 8.56MB 多线程 POSIX
1
步进电机驱动芯片THB6064H有八种细分模式可选,最大达1/64,该资料中含1、THB6064H驱动电路的电路原理图及PCB板,还有原理图测试板说明书,可用于学习、电子竞赛或行业开发;
(强烈推荐!)2、THB6064芯片说明书,步进电机工作原理(讲解非常到位且易懂);
刚搞完竞赛,来给大家共享一下!
2025/3/18 20:08:24 2.31MB 步进电机 驱动芯片 THB6064H 资料大全
1
内有农历的核心算法公历的显示八字的计算每日太阳升降情况介绍回历的显示每月的月亮情况介绍
2025/3/16 7:34:44 865KB C# 农历 公历 回历
1
本文件夹包含个人所做protel是一个电子密码锁的设计,,还包含一个八键简易电子琴的报告,,适合要protel大作业的学生,下载。
2025/3/11 20:30:53 1.41MB dxp大作业
1
很全的天龙八部全套源码,控制台+lua脚本+测试模块,有很高的参考价值.
2025/3/9 15:44:09 38.68MB lua 天龙八部全套源码
1
FPGA入门代码:实现两个8位二进制相加,其结果的范围应该在00000000到111111110之间,八位二进制数换算成三位十进制数最大为255,也就是说要输入两个000到255之间的数。
528KB FPGA
1
基于FPGA八路抢答器设计,详细设计,步骤,文字表述,电路图都很清晰WORD版可以直接打印
2025/3/6 22:43:21 245KB 八路抢答器
1
图像匹配时用的标准图像集。
标准的局部描述符测评图像数据库中的六幅图像。
包括八组图像,不同的条件包括旋转变换、亮度变换、JPEG压缩等。
2025/3/4 19:23:37 52.79MB 图像集
1
OpenCore5.0+RedisCache搭建缓存处理模块,整体工程,请留意我发布的相关资料,该项目主要由Net5.0,Nhibernate5.4,Log4net2,Redis,Bootstrap5等最新技术框架构成。
主要模块包括OpenCore.API,OpenCore.Redis,OpenCore.DB,OpenCore.Repository,OpenCore.Entity,OpenCore.Foramework,OpenCore.Map,OpenCore.Web八大工程组成。
2025/3/4 5:51:10 128KB net5.0 Netcore C# nhibernate
1
RPGViewer图片资源提取工具作者:Van说明:下载RPGViewer之后,不要忘记同时下载RPGViewerSupportFile。
解压RPGViewer后,将RPGViewerSupportFile拷贝到解压之后的目录,然后选择“解压到当前文件夹”即可。
有需要的朋友可以做为研究之用郑重声明本程序提供的导入导出功能仅供个人学习研究之用,图像之版权属相关公司所有,请勿将提取的图片或导入修改后的图象文件用于其它用途功能简介一、浏览执行文件菜单中的打开。
如果你是第一次查看这个游戏,RPGViewer会弹出对话框让你选择游戏的路径,一般选择游戏主程序所在目录即可之后就可以用浏览菜单或者浏览工具栏查看游戏中的图片了。
如果遇到不支持的图片格式或者读取图片时发生错误,RPGViewer会在状态栏显示相关的出错信息。
二、搜索可以根据文件名查找图片。
支持查找的游戏列表详见附录1搜索支持模糊查找、区分大小写和正则表达式,正则表达式的具体定义参见附录3三、导出(支持bmp、jpg、png和mng格式,mng格式的说明参见附录2。
另外支持导出为三国群英传的SHP格式)RPGViewer提供三种导出功能:1、当前帧导出当前显示的图片2、当前图片当图片仅有一帧时,和导出“当前帧”相同。
否则将导出该图片的所有帧。
3、所有图片导出所有图片(!注意:如果图片有多帧,那么此功能会导出所有帧!)注:有些导出图片的高度是负的,可能在某些图片浏览器中不能正常显示。
建议使用Irfanview或PhotoShop进行查看和编辑全部导出功能会将所有的图片导出到目标文件夹中,文件名依次为1-1.bmp,2-1.bmp...四、导入(支持bmp、gif、jpg和png格式)你可以导入bmp或者png(支持透明色和alpha通道)格式的图片(注:“导入”操作只是引入了一个替换的标记,此时并未进行实际的替换)如果想取消对当前图片的替换可以使用“导入”菜单中的“还原”全部图像都替换完之后,执行“导入”菜单中的“保存”,所作的替换就会生效五、压缩包操作可以提取游戏数据包中的所有文件,并支持部分游戏的文件替换。
支持解包和替换的游戏列表详见附录1附录1:浏览和导出支持以下游戏:大宇:轩辕剑系列(2代、3代、4代以及它们的外传)、轩辕伏魔录,仙剑1(DOS&WIN;版)、新仙剑、仙剑2、仙剑3和仙剑3外传智冠:金庸群侠传(光盘&硬盘版)、武林群侠传、三国群侠传、天龙八部(部分)奥汀:三国群英传1~6、幻世录1~2宇峻:绝代双骄1~3、幻想三国志1、2弘煜:风色幻想1、SP&2、3、4光谱:富甲天下3、富甲天下4汉堂:阿玛迪斯战记、天地劫-神魔至尊传、天地劫序传-幽城幻剑录、天地劫外章-寰神结新瑞狮:吕布与貂蝉、反三国志、天河传说目标:秦殇、秦殇前传-复活金山:新剑侠情缘、月影传说、剑侠情缘2、地雷战、决战朝鲜KOEI:三国志1~5(头像文件)、三国志6~11、SanInternet、SanBattleField、英杰传系列、太阁4~5,信长之野望3Win版、信长之野望6(头像文件)、信长之野望7~12、真三国无双3、水浒传天命之誓&天导108星、成吉思汗4、王国兴亡录TGL:神奇传说——远征奥德赛1&2、神奇传说1~3、战国美少女1&2Falcom:伊苏1、伊苏2(部分图片调色板不对)、英雄传说6(部分)、失落的羽翼、圣界的奇迹、绯苍幻想曲ego:圣魔大战、新圣魔大战、艾伦希亚战记、红泪、苍月、魔法少年、永远的羁绊、我的美丽天使、秘境传说、乱世奇缘KEY:Kanon、AIRKID:梦之翼、Never7、Ever17、秋之回忆1~3、秋之回忆-想君ELF:龙骑士4、同级生2(DOS&Win;版)、下级生Illusion:欲望的血液4、尾行2、尾行3、BattleRaper2、人工少女2、波动少女1.5、波动少女2SoftMax:西风狂诗曲NWC:英雄无敌2、英雄无敌3EIDOS:盟军敢死队-使命召唤&深入敌后UBI:英雄无敌5测试版其它:郑问之三国志字体:三国志2~5、San9&10;(存为png格式可以保留alpha通道)、MagicWin导入支持以下游戏:三1~5头像,三6~10,三11的头像,英杰传系列,大航海4,信长7、8、11、12,成吉思汗4,王国兴亡录地雷战三国群英传1~3的PAK文件(仅限于其中的SHP格式)(注:未经严格测试,替换前请一定要备份,以避免不必要的损失)部分支持信长12和三国志11的bin文件的导入注:曹操传的meff不支持导入查找和解包支持以下游戏:大宇:CPK(仙剑3和仙剑3外传)奥汀:PAK(三国群英传1~3、幻世录1、幻世录2)、PCK(三国群英传4&5)宇峻:*Combat.dat、*Man.dat、*Role.dat(幻想三国志1、2)弘煜:BMP、FACE、MANBMP、MAPBMP(风色幻想1&SP;)、PAK(风色幻想2)、JBF(风色幻想3&4)汉堂:DAT(幽城幻剑录、寰神结)TGL:PAC(神奇传说3、远征奥德赛1&2)、PAK(战国美少女2)Falcom:YS(伊苏1)、ED6_DT??.dat(英雄传说6)ego:DAT、TPF(乱世奇缘)KID:DATELF:ARCillusion:PPSoftMax:ZMK(西风狂诗曲)NWC:AGG(英雄无敌2)、LOD(英雄无敌3)EIDOS:DIR(盟军敢死队)UBI:PAK(英雄无敌5测试版)替换支持以下游戏:奥汀:PAK(三国群英传1~3)附录2:mng导出格式简介此格式对应多帧的PNG图片,效果类似于GIF动画,但支持RGB+alpha通道并且无损压缩。
可以使用IrfanView、XnView查看,GIMP编辑(相关支持软件可以去http://www.libpng.com/pub/mng/mngapps.html查看)MNGIE插件:http://entropymine.com/jason/mng4ie/(可以到http://free.ys168.com/?pigspy下载,里面提供了注册文件reg.dat和卸载文件unreg.dat)装了该插件之后可以直接用IE打开mng文件注1、此导出格式仅适用于生成动画(具体包括:轩辕剑的tsw图片,绝代双骄2&3、幻想三国志1&2的战斗和法术图片,金山的ASF.PAK,西风狂诗曲的OBC文件)注2、如果用这种格式保存帧数太多、图像范围太大的图片(比如全屏幕的法术),可能需要花较多的时间生成,同时生成的图片也可能会比较大)注3、你可以使用相关工具进一步减少mng的尺寸(比如使用delta-PNG方式压缩)注4、当提取当前帧时,会自动保存为png格式附录3:正则表达式具体参见http://msdn2.microsoft.com/en-us/library/k3zs4axe(en-us,VS.80).aspx中的“RegularExpressionSyntax”一些正则表达式的例子:严格匹配face:^face$模糊查找face:face查找mFace???.shp的文件:mFace...\.shp$
2025/3/3 11:19:18 1.08MB
1
共 601 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡