1.介绍什么是线程,用来干什么.docVIP

  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文档。上传文档
查看更多
1.介绍什么是线程,用来干什么

1.介绍:什么是线程,用来干什么? 线程常常被叫做轻量级的(lightweight)进程,虽然这个称呼有点过于简单了,但这是一个不错的开始。线程虽然不是UNIX的进程,但很相似。为了弄懂他们的区别,我们必须看看UNIX进程、Mach任务和线程的关系。在UNIX中,一个进程包括可执行的程序以及许多的资源,象是文件描述符表和地址空间。在Mach中一个任务只包括资源;线程负责所有的执行活动。一个Mach任务可以有几个线程与之相关联,而且所有的线程必须与某任务关联。与同一个任务相关联的线程共享该任务的资源。所以本质上一个线程就是一个程序计数器,一个堆栈,和一系列寄存器--其余所有的数据结构都属于任务。一个在Mach中的UNIX进程被模拟为只有一个线程的任务。 因为相比于进程,线程很小,所以如果用cpu的消耗来衡量,线程的创建相对廉价。因为进程要求有它们自身的资源,而线程共享资源,所以线程节省内存。Mach线程赋予程序员开发可同时执行于单cpu和多cpu的机器上并发程序的能力,如果有的话可利用额外的cpu。另外,如果程序在单cpu环境下易于阻塞或导致迟滞,比如文件操作活套接字操作,线程可以提升性能。 在接下来的部分中,我们会讨论一部分POSIX线程标准和它在DEC OSF/1 OS上的执行细节,V3.0.POSIX线程被称作pthreads并且与非POSIX的cthreads很相似。 2.Hello World 既然形式做完了,那我们就开始吧。pthread_create函数创建一个新的线程。它有四个参数,(一个线程变量或是线程的持有者id,一个线程的属性(同步),当线程开始执行时调用的函数,一个该函数的参数)。比如: pthread_t a_thread; pthread_attr_t a_thread_attribute; void thread_function(void *argument); char *some_argument; pthread_create( a_thread, a_thread_attribute, (void *)thread_function, (void *) some_argument); 一个线程的属性当前只指定了被使用的最小的堆栈大小。以后的线程属性可能会更有趣,但现在大多数的程序只要简单的使用默认的就行了,即把pthread_attr_default传入函数。与用UNIX的fork命令创建的进程会与父线程同时执行同一条指令不同,线程在指定的函数中开始它们的执行。理由十分简单;如果线程不在别处开始执行,会得到的结果是许多线程用相同的资源执行同一条指令。回想一下每个进程都有自己的资源,而线程共享它们。 既然我们知道了如何去创建线程,我们已为我们的第一个程序做好了准备。让我们设计一个在标准输出上 打印出Hello World的多线程的程序。首先我们需要两个线程变量和一个被新的线程调用并执行的函数。 我们也必须指定每个线程必须打印出不同的消息。一种方法是把两个单词分成两个不同的字符串并且给每个 线程一个不同的字符串当作它的startup(启动)参数。看一下下面的代码: void print_message_function( void *ptr ); main() { pthread_t thread1, thread2; char *message1 = Hello; char *message2 = World; pthread_create( thread1, pthread_attr_default, (void*)print_message_function, (void*) message1); pthread_create(thread2, pthread_attr_default, (void*)print_message_function, (void*) message2); exit(0); } void print_message_function( void *ptr ) { char *message; message = (char *) ptr; printf(%s , message); } 注意

文档评论(0)

cynthia_h + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档