第21章 线程本地存储器.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第21章 线程本地存储器.PDF

下载 第2 1章 线程本地存储器 有时,将数据与对象的实例联系起来是很有帮助的。例如,窗口的附加字节可以使用 S e t Wi n d o w s Wo r d和S e t Wi n d o w L o n g函数将数据与特定的窗口联系起来。可以使用线程本地存 储器将数据与执行的特定线程联系起来。例如,可以将线程的某个时间与线程联系起来。然后, 当线程终止运行时,就能够确定线程的寿命。 C / C + +运行期库要使用线程本地存储器( T L S )。由于运行期库是在多线程应用程序出现前 的许多年设计的,因此运行期库中的大多数函数是用于单线程应用程序的。函数 s t r t o k就是个 很好的例子。应用程序初次调用 s t r t o k 时,该函数传递一个字符串的地址,并将字符串的地址 保存在它自己的静态变量中。当你将来调用 s t r t o k函数并传递N U L L 时,该函数就引用保存的字 符串地址。 在多线程环境中,一个线程可以调用 s t r t o k ,然后,在它能够再次调用该函数之前,另一 个线程也可以调用 S t r t o k 。在这种情况下,第二个线程会在第一个线程不知道的情况下,让 s t r t o k用一个新地址来改写它的静态变量。第一个线程将来调用 s t r t o k时将使用第二个线程的字 符串,这就会导致各种各样难以发现和排除的错误。 为了解决这个问题,C / C + +运行期库使用了T L S 。每个线程均被赋予它自己的字符串指针, 供s t r t o k函数使用。需要予以同样对待的其他C / C + +运行期库函数还有a s c t i m e和g m t i m e 。 如果你的应用程序需要严重依赖全局变量或静态变量,那么T L S能够帮助解决它遇到的问题。 但是编程人员往往尽可能减少对这些变量的使用,而更多地依赖自动(基于堆栈的)变量和通过 函数的参数传递的数据。这样做是很好的,因为基于堆栈的变量总是与特定的线程相联系的。 标准的C运行期库一直是由许多不同的编译器供应商来实现和重新实现的。如果 C编译器 不包含标准的C运行期库,那么就不值得去购买它。编程员多年来一直使用标准的 C运行期库, 并且将会继续使用它,这意味着s t r t o k之类的函数的原型和行为特性必须与上面所说的标准 C运 行期库完全一样。如果今天重新来设计C运行期库,那么它就必须支持多线程应用程序的环境, 并且必须采取相应的措施来避免使用全局变量和静态变量。 在我的软件开发项目中,我总是尽可能避免使用全局变量和静态变量。如果你的应用程序 使用全局变量和静态变量,那么建议你务必观察每个变量,并且了解一下它能否改变成基于堆 栈的变量。如果打算将线程添加给应用程序,那么这样做可以节省大量时间,甚至单线程应用 程序也能够从中得到许多好处。 在编写应用程序和D L L 时,可以使用本章中介绍的两种T L S方法,即动态T L S和静态T L S 。 但是,当创建D L L 时,这些T L S往往更加有用,因为D L L常常不知道它们链接到的应用程序的 结构。不过,当编写应用程序时,你通常知道将要创建多少线程以及如何使用这些线程。然后 就可以创造一些临时性的方法,或者最好是使用基于堆栈的方法(局部变量),将数据与创建 的每个线程联系起来。不管怎样,应用程序开发人员也能从本章讲述的内容中得到一些启发。 21.1 动态T L S 若要使用动态T L S ,应用程序可以调用一组 4个函数。这些函数实际上是 D L L用得最多的 函数。图2 1 - 1显示了Wi n d o w s用来管理T L S 的内部数据结构。 510计计第四部分 动态链接库 下载 进程 线程本地存储器的位标志:0-(TLS_MINIMUM_AVAILABLE-1) 线程1 线程2 0 引索0 0 引索0 0 引索1 0 引索1

文档评论(0)

专业好文档 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6110200002000000

1亿VIP精品文档

相关文档