多线程类库的设计与实现doc

多线程类库的设计与实现doc

ID:18548973

大小:168.50 KB

页数:32页

时间:2018-09-18

多线程类库的设计与实现doc_第1页
多线程类库的设计与实现doc_第2页
多线程类库的设计与实现doc_第3页
多线程类库的设计与实现doc_第4页
多线程类库的设计与实现doc_第5页
资源描述:

《多线程类库的设计与实现doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、多线程类库的设计与实现引言很多书都会告诉你那些概念是什么,然而只有很少的书会告诉你具体该怎么做。对于很多人来说,包括我,有时候掌握“该怎么做”要比了解“那是什么”要难得多。一方面,名词解释很少会出错,而且做起来很轻松,而要具体执行的话就立刻涉及到价值观和方法论的问题,这些都比较难于统一,容易引起异议。另一方面,就我个人经验而言,很多人只会解释“那是什么”,而根本不懂“该怎么做”。所以,我们打算逆流而上,基本上不去说“那是什么”,除非有相当的必要。中心内容是着手“该怎么做”。这个实践系列可以说是笔者积累的一些心得,当然,不可避免的要涉及到个人的价值观和方法论问

2、题,不可避免的会产生异议。不过那又怎样呢,难道这个世界就不允许有异议吗。实际上,我个人并不排斥异议,相反的,我倒认为没有异议的氛围要么是可怕的,要么是病态的。目标:用C++设计一个简单、实用、便于移植的线程类先说第一条,简单,这里指模型简单,机制简单。我们都知道线程是现代操作系统的基本概念之一,当然定义有很多种了,我们这里随便列一个:(Athreadis)Asequenceofinstructionswhichmayexecuteinparallelwithotherthreads.这个定义是从Wiki上拷过来的,中文直译就是:(线程)是可以和其他线程并行执

3、行的指令序列。这个定义是递归的,一般来说递归定义用来定义比较基本的概念,因为很难再往下分割了。为了明确起见,我们再为上面的定义加一些限制,让它成为下面的样子:1.线程是若干计算机指令序列的集合;2.线程可以和其他线程并行执行;3.属于同一个进程的若干个线程可以共享地址空间。第3条又带出另一个概念“进程”,这里就不再解释了。很多操作系统中有所谓线程的同步通信和异步通信机制。我们只使用同步通信机制。这么做有两个好处,一是可以使我们的线程模型尽量简单,二是可以回避操作系统相关性,因为同步机制比较简单,大多数操作系统的实现相互都很类似,而异步通信机制差别就很大了。我

4、们再来说实用。这里的实用是指实用主义,亦即为了减少成本(编码量)、提高效益(开发速度)而舍弃一些“本来应该有”的特性。比如说,我们不打算设计多层次的类,也不打算设计抽象类,而只打算设计一个可以简单使用的线程类。相反的,很多线程库,包括ZThread,将线程模型抽象分化,封装到多个层次的类里面。我们不是说这样的方针不好,这里只是想强调我们的方针是实用主义。最后一条是关于移植性。我们希望这个线程类可以不加修改就应用于Windows32位系统和支持PosixThread线程的Linux/Unix系统。其他。接下来我们来看看开发环境。我们要考虑同时支持Win32和L

5、inux系统。Windows上使用Microsoft®VisualC++2005Express,因这个软件包具有免费的许可协议,不需要花钱。Linux上使用g++(gcc)3.4.4,更高的版本应该也没有问题,使用这个版本是为了和某些cygwin版本兼容。当然,GNU流都是免费的。背景:C++与多线程这个系列的主要内容是介绍怎样用C++语言设计与实现一个多线程类库。尽管多线程在现代主流操作系统中早已不是什么新鲜概念,多线程设计与开发也已经成为软件开发的流行模式,但是目前为止,C++语言规范本身并没有明确支持多线程程序设计。根据目前最新的C++语言标准《ISO

6、/IEC14882:2003ProgrammingLanguageC++》,通篇只有一个地方出现"thread"这个字眼:Whenanexceptionisthrown,controlistransferredtothenearesthandlerwithamatchingtype(15.3);“nearest”meansthehandlerforwhichthecompound-statement,ctor-initializer,orfunction-bodyfollowingthetrykeywordwasmostrecentlyenteredbyth

7、ethreadofcontrolandnotyetexited.(笔者译文:当一个异常被抛出时,(程序)控制被转交到最近的具有匹配类型的异常控制块。“最近”是指距离关键字try最近的并且与该控制同属一个尚未退出的线程的,一个复合代码断,或者构造函数的初始化符(即构造函数的成员初始化列表),或者一个函数体。)这是标准中唯一一次提到线程这个概念,意思大致是说C++异常控制是线程单位分开的。可见C++委员会并非是没有意识到线程概念的存在,而只是有意回避它。因为C++是一个标准的编程语言,独立于各种操作系统平台。线程是与操作系统具体实现密切相关的事物,C++语言中本

8、身去支持线程是不合适的。只是在异常处理的定义中实在绕

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。