网站大量收购独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程类库的设计与实现.doc

多线程类库的设计与实现 引言 很多书都会告诉你那些概念是什么,然而只有很少的书会告诉你具体该怎么做。对于很多人来说,包括我,有时候掌握“该怎么做”要比了解“那是什么”要难得多。一方面,名词解释很少会出错,而且做起来很轻松,而要具体执行的话就立刻涉及到价值观和方法论的问题,这些都比较难于统一,容易引起异议。另一方面,就我个人经验而言,很多人只会解释“那是什么”,而根本不懂“该怎么做”。 所以,我们打算逆流而上,基本上不去说“那是什么”,除非有相当的必要。中心内容是着手“该怎么做”。 这个实践系列可以说是笔者积累的一些心得,当然,不可避免的要涉及到个人的价值观和方法论问题,不可避免的会产生异议。不过那又怎样呢,难道这个世界就不允许有异议吗。实际上,我个人并不排斥异议,相反的,我倒认为没有异议的氛围要么是可怕的,要么是病态的。 目标:用C++设计一个简单、实用、便于移植的线程类 先说第一条,简单,这里指模型简单,机制简单。 我们都知道线程是现代操作系统的基本概念之一,当然定义有很多种了,我们这里随便列一个: (A thread is) A sequence of instructions which may execute in parallel with other threads. 这个定义是从Wiki上拷过来的,中文直译就是:(线程)是可以和其他线程并行执行的指令序列。这个定义是递归的,一般来说递归定义用来定义比较基本的概念,因为很难再往下分割了。 为了明确起见,我们再为上面的定义加一些限制,让它成为下面的样子: 1.线程是若干计算机指令序列的集合; 2.线程可以和其他线程并行执行; 3.属于同一个进程的若干个线程可以共享地址空间。 第3条又带出另一个概念“进程”,这里就不再解释了。 很多操作系统中有所谓线程的同步通信和异步通信机制。我们只使用同步通信机制。这么做有两个好处,一是可以使我们的线程模型尽量简单,二是可以回避操作系统相关性,因为同步机制比较简单,大多数操作系统的实现相互都很类似,而异步通信机制差别就很大了。 我们再来说实用。 这里的实用是指实用主义,亦即为了减少成本(编码量)、提高效益(开发速度)而舍弃一些“本来应该有”的特性。比如说,我们不打算设计多层次的类,也不打算设计抽象类,而只打算设计一个可以简单使用的线程类。相反的,很多线程库,包括ZThread,将线程模型抽象分化,封装到多个层次的类里面。我们不是说这样的方针不好,这里只是想强调我们的方针是实用主义。 最后一条是关于移植性。 我们希望这个线程类可以不加修改就应用于Windows 32位系统和支持Posix Thread线程的Linux/Unix系统。 其他。 接下来我们来看看开发环境。我们要考虑同时支持Win32和Linux系统。Windows上使用Microsoft ? Visual C++ 2005 Express,因这个软件包具有免费的许可协议,不需要花钱。Linux上使用g++(gcc)3.4.4,更高的版本应该也没有问题,使用这个版本是为了和某些cygwin版本兼容。当然,GNU流都是免费的。 背景:C++与多线程 这个系列的主要内容是介绍怎样用C++语言设计与实现一个多线程类库。尽管多线程在现代主流操作系统中早已不是什么新鲜概念,多线程设计与开发也已经成为软件开发的流行模式,但是目前为止,C++语言规范本身并没有明确支持多线程程序设计。根据目前必威体育精装版的C++语言标准《ISO/IEC 14882:2003 Programming Language C++》,通篇只有一个地方出现thread这个字眼: When an exception is thrown, control is transferred to the nearest handler with a matching type (15.3); “nearest” means the handler for which the compound-statement, ctor-initializer, or function-body following the try keyword was most recently entered by the thread of control and not yet exited. (笔者译文:当一个异常被抛出时,(程序)控制被转交到最近的具有匹配类型的异常控制块。“最近”是指距离关键字try最近的并且与该控制同属一个尚未退出的线程的,一个复合代码断,或者构造函数的初始化符(即构造函数的成员初始化列表),或者一个函数体。) 这是标准中唯一一次提到线程这个概念,意思大致是

您可能关注的文档

文档评论(0)

teda + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档