介绍什么是程用来干什么.doc

介绍什么是程用来干什么.doc

ID:55656855

大小:35.00 KB

页数:9页

时间:2020-05-23

介绍什么是程用来干什么.doc_第1页
介绍什么是程用来干什么.doc_第2页
介绍什么是程用来干什么.doc_第3页
介绍什么是程用来干什么.doc_第4页
介绍什么是程用来干什么.doc_第5页
资源描述:

《介绍什么是程用来干什么.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.介绍:什么是线程,用来干什么?线程常常被叫做轻量级的(lightweight)进程,虽然这个称呼有点过于简单了,但这是一个不错的开始。线程虽然不是UNIX的进程,但很相似。为了弄懂他们的区别,我们必须看看UNIX进程、Mach任务和线程的关系。在UNIX中,一个进程包括可执行的程序以及许多的资源,象是文件描述符表和地址空间。在Mach中一个任务只包括资源;线程负责所有的执行活动。一个Mach任务可以有几个线程与之相关联,而且所有的线程必须与某任务关联。与同一个任务相关联的线程共享该任务的资源。所以本质上一个线程就是一个程序计数器,一个堆栈,和一系列寄存器

2、--其余所有的数据结构都属于任务。一个在Mach中的UNIX进程被模拟为只有一个线程的任务。因为相比于进程,线程很小,所以如果用cpu的消耗来衡量,线程的创建相对廉价。因为进程要求有它们自身的资源,而线程共享资源,所以线程节省内存。Mach线程赋予程序员开发可同时执行于单cpu和多cpu的机器上并发程序的能力,如果有的话可利用额外的cpu。另外,如果程序在单cpu环境下易于阻塞或导致迟滞,比如文件操作活套接字操作,线程可以提升性能。在接下来的部分中,我们会讨论一部分POSIX线程标准和它在DECOSF/1OS上的执行细节,V3.0.POSIX线程被称作pth

3、reads并且与非POSIX的cthreads很相似。2.HelloWorld既然形式做完了,那我们就开始吧。pthread_create函数创建一个新的线程。它有四个参数,(一个线程变量或是线程的持有者id,一个线程的属性(同步),当线程开始执行时调用的函数,一个该函数的参数)。比如:pthread_ta_thread;pthread_attr_ta_thread_attribute;voidthread_function(void*argument);char*some_argument;pthread_create(&a_thread,a_thread

4、_attribute,(void*)&thread_function,(void*)&some_argument);一个线程的属性当前只指定了被使用的最小的堆栈大小。以后的线程属性可能会更有趣,但现在大多数的程序只要简单的使用默认的就行了,即把pthread_attr_default传入函数。与用UNIX的fork命令创建的进程会与父线程同时执行同一条指令不同,线程在指定的函数中开始它们的执行。理由十分简单;如果线程不在别处开始执行,会得到的结果是许多线程用相同的资源执行同一条指令。回想一下每个进程都有自己的资源,而线程共享它们。既然我们知道了如何去创建线程

5、,我们已为我们的第一个程序做好了准备。让我们设计一个在标准输出上打印出"HelloWorld"的多线程的程序。首先我们需要两个线程变量和一个被新的线程调用并执行的函数。我们也必须指定每个线程必须打印出不同的消息。一种方法是把两个单词分成两个不同的字符串并且给每个线程一个不同的字符串当作它的"startup(启动)"参数。看一下下面的代码:voidprint_message_function(void*ptr);main(){pthread_tthread1,thread2;char*message1="Hello";char*message2="World"

6、;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);}voidprint_message_function(void*ptr){char*message;message=(char*)ptr;printf("%s",messa

7、ge);}注意一下print_message_function的函数原型和在pthread_create调用中message参数前的转换。这个程序通过调用pthread_create函数并传递启动参数"Hello"创建第一个线程;第二个线程通过"World"参数来创建。当第一个线程开始执行时它从带着"Hello"参数的print_message_function开始。它打印出"Hello"然后终止执行。当一个线程离开初始的函数它也终止了,所以第一个线程在打印出"Hello"后就终止了。当第二个线程开始执行并打印出"World"后也相应的终止了。虽然这个程序看

8、起来很合理,但它有两个缺点。第一个也是最重要的,线程

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

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

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