1 / 40
文档名称:

为什么要用.doc

格式:doc   页数:40页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

为什么要用.doc

上传人:df158687 2016/7/21 文件大小:0 KB

下载得到文件列表

为什么要用.doc

文档介绍

文档介绍:1. 导论: thread 是什么?为什么要用 thread ? Thread 通常被称做轻量级的行程( Lightweight process ; LWP ),这个说法似乎过于简单了一些,但却不失为一个好的起点; thread 是 UNIX process 的近亲, 但却不完全相同。为了说明何谓 thread ,我们必须先了解 UNIX process 与 Mach task 、 thread 间的关系。在 UNIX 中,一个 process 包括了一个执行中的程式,和一些他所需的系统资源,诸如档案描述表和位址空间等。但是在 Mach 中,一个 task 却只包括了一些系统资源; 而由 thread 掌握了所有的执行活动。一个 Mach task 可能有任意多个 thread ,而 Mach 系统中所有的 thread 均属于一些 task 。属于同一个 task 的所有 thread 共享该 task 所拥有的系统资源。因此, thread 实质上就是一个程式计数器、一个堆叠再加上一组暂存器。 UNIX 的一个 process 可以看成是一个只有一个 thread 的 Mach task 。跟 UNIX process 比起来, thread 是非常娇小玲珑的,因此对 CPU 而言,产生一个 thread 是一件相对便宜的工作。另一方面,共享系统资源的 thread 跟独占系统资源的 process 比起来, thread 也是相当节省记忆体的。 Mach thread 让程式设计师们能很方便的做出执行于单一或多重处理器环境下同时执行的程式。不需要考虑处理器多寡的问题,而直接得到多重处理的效能(如果有多的处理器的话)。此外即使在单一 CPU 的环境下, 如果程式是属于常常『休息』的那种,如 file 及 socket I/O , thread 还是能提供效能上的增进。以下将介绍一些简单的 POSIX thread ,和他在 DEC OSF/1 OS, . 上的版本(译注:我是在 solaris /和 SunOS 上测试的啦!差不多。), POSIX thread 简称为 pthread ,他和 non-POSIX 的 cthread 非常相近。 2. Hello World 废话少说,现在就开始吧! pthread_create 函数建立一个 thread 。他需要四个参数: thread 变数、 thread 特性、一个描述 thread 行为的函数和这个函数所需的参数。举例如下: 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); thread attribute 描述 thread 的一些特性,目前我们只需要用他来指定 thread 至少需要多大的堆叠。在未来会有许多有趣的 thread attribute ,但就目前而言,大部分的程式只需简单的指定 pthread_attr_default 就可以了。不像 process , 需要使用 fork() system call 让 child process 和他的 parents 同时开始执行, thread 从 pthread_create 中指定的 thread_function 开始执行。理由非常简单:如果 thread 不从一个另外的地方开始执行,将会造成一堆 thread 使用相同的系统资源执行相同的指令。记得吗? thread 是『共享』系统资源的。(译注:在这里停下来,回忆一下 process 是怎么产生的... ^_^ ) 在知道如何产生一个 thread 后,就可以开始我们的第一个 thread 程式了! 来设计一个 multi-thread 版的 printf("Hello world\n"); 吧!一开始,我们需要两个 thread 变数,和一个 thread function ,另外,还要能告诉不同的 thread 印出不同的讯息。我想要让不同的 thread 印出"hello world" ,不同的两个部分"hello" 和"world" 。程式看起来像这样: void print_message_function( void *ptr ); main() { pthread_t thread1, thread2; char *message1