跟我学Linux编程-13-多线程编程-性能
- 格式:doc
- 大小:47.00 KB
- 文档页数:6
关于Linux多线程编程Linux线程分为两类,一是核心级支持线程,在核心级实现线程时,线程的实现依赖于内核,无论是在用户进程中的线程还是系统进程中的线程,他们的创建、撤消、切换都由内核实现。
核心只有单线程进程概念,而多线程进程由与应用程序连接的过程库实现。
另一类线程是用户级线程,在Linux众多的线程库中,大部分实现的是用户级线程。
系统创建线程的顺序如下:当一个线程启动后,它会自动创建一个线程即主线程(main thread)或者初始化线程(initial thread),然后就利用pthread_initialize()初始化系统管理线程并且启动线程机制。
Linux线程编程基础要创建一个多线程程序,必须加载pthread.h头文件。
要掌握多线程编程常用的几个函数:1、创建新线程函数:pthread_create()2、挂起当前线程函数:pthread_join()3、线程注册的清除处理函数:pthread_exit()4、取消一个线程函数:pthread_cancel()5、挂起当前线程,直到满足某种条件:pthread_cond_init多线程的同步1、互斥锁互斥锁用来保证一段时间内只有一个线程在执行一段代码。
当在同一内存空间运行多个线程时,为保证多个线程之间不相互破坏,要创建互斥量,如果一个线程已经锁定一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程被挂起(不占用任何CPU资源),直到第一个线程解除对这个互斥量的锁定为止。
第二个线程将被唤醒并继续执行,同时锁定这个互斥量。
创建互斥量时,必须首先声明一个类型为pthread_mutex_t的变量,然后对其进行初始化,结构pthread_mutex_t为不公开的数据类型,其中包含一个系统分配的属性对象。
函数pthread_mutex_init用来生成一个互斥锁。
锁定一个互斥量时使用函数pthread_mutex_lock(),它尝试锁定一个互斥量,如果该互斥量已经被其它线程锁定,该函数就把调用自己的线程挂起,一旦该互斥量解锁,它将恢复运行并锁定该互斥量。
linux多线程编程详解教程(线程通过信号量实现通信代码)线程按照其调度者可以分为⽤户级线程和核⼼级线程两种。
(1)⽤户级线程主要解决的是上下⽂切换的问题,它的调度算法和调度过程全部由⽤户⾃⾏选择决定,在运⾏时不需要特定的内核⽀持。
在这⾥,操作系统往往会提供⼀个⽤户空间的线程库,该线程库提供了线程的创建、调度、撤销等功能,⽽内核仍然仅对进程进⾏管理。
如果⼀个进程中的某⼀个线程调⽤了⼀个阻塞的系统调⽤,那么该进程包括该进程中的其他所有线程也同时被阻塞。
这种⽤户级线程的主要缺点是在⼀个进程中的多个线程的调度中⽆法发挥多处理器的优势。
(2)这种线程允许不同进程中的线程按照同⼀相对优先调度⽅法进⾏调度,这样就可以发挥多处理器的并发优势。
现在⼤多数系统都采⽤⽤户级线程与核⼼级线程并存的⽅法。
⼀个⽤户级线程可以对应⼀个或⼏个核⼼级线程,也就是“⼀对⼀”或“多对⼀”模型。
这样既可满⾜多处理机系统的需要,也可以最⼤限度地减少调度开销。
Linux的线程实现是在核外进⾏的,核内提供的是创建进程的接⼝do_fork()。
内核提供了两个系统调⽤clone()和fork(),最终都⽤不同的参数调⽤do_fork()核内API。
当然,要想实现线程,没有核⼼对多进程(其实是轻量级进程)共享数据段的⽀持是不⾏的,因此,do_fork()提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享⽂件系统信息)、CLONE_FILES(共享⽂件描述符表)、CLONE_SIGHAND(共享信号句柄表)和CLONE_PID(共享进程ID,仅对核内进程,即0号进程有效)。
当使⽤fork系统调⽤时,内核调⽤do_fork()不使⽤任何共享属性,进程拥有独⽴的运⾏环境,⽽使⽤pthread_create()来创建线程时,则最终设置了所有这些属性来调⽤__clone(),⽽这些参数⼜全部传给核内的do_fork(),从⽽创建的“进程”拥有共享的运⾏环境,只有栈是独⽴的,由__clone()传⼊。
Linux多线程编程小结1.Linux进程与线程Linux进程创建一个新线程时,线程将拥有自己的栈(因为线程有自己的局部变量),但与它的创建者共享全局变量、文件描述符、信号句柄和当前目录状态。
Linux通过fork创建子进程与创建线程之间是有区别的:fork创建出该进程的一份拷贝,这个新进程拥有自己的变量和自己的PID,它的时间调度是独立的,它的执行几乎完全独立于父进程。
进程可以看成一个资源的基本单位,而线程是程序调度的基本单位,一个进程内部的线程之间共享进程获得的时间片。
2._REENTRANT宏在一个多线程程序里,默认情况下,只有一个errno变量供所有的线程共享。
在一个线程准备获取刚才的错误代码时,该变量很容易被另一个线程中的函数调用所改变。
类似的问题还存在于fputs之类的函数中,这些函数通常用一个单独的全局性区域来缓存输出数据。
为解决这个问题,需要使用可重入的例程。
可重入代码可以被多次调用而仍然工作正常。
编写的多线程程序,通过定义宏_REENTRANT来告诉编译器我们需要可重入功能,这个宏的定义必须出现于程序中的任何#include语句之前。
_REENTRANT为我们做三件事情,并且做的非常优雅:(1)它会对部分函数重新定义它们的可安全重入的版本,这些函数名字一般不会发生改变,只是会在函数名后面添加_r字符串,如函数名gethostbyname变成gethostbyname_r。
(2)stdio.h中原来以宏的形式实现的一些函数将变成可安全重入函数。
(3)在error.h中定义的变量error现在将成为一个函数调用,它能够以一种安全的多线程方式来获取真正的errno的值。
3.线程的基本函数大多数pthread_XXX系列的函数在失败时,并未遵循UNIX函数的惯例返回-1,这种情况在UNIX函数中属于一少部分。
如果调用成功,则返回值是0,如果失败则返回错误代码。
1.线程创建:#include <pthread.h>int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);参数说明:thread:指向pthread_create类型的指针,用于引用新创建的线程。
Linux下的多线程编程上机准备吴雨龙目录1.我们为什么要练习多线程?(多线程的好处) (3)2.Linux下的多线程编程必备知识 (3)1)VIM的使用 (3)a)指令模式下常用命令 (3)b)插入模式 (4)2)编译器gcc的使用必知 (4)3)调试器gdb的使用 (4)4)Linux下的C编程常用头文件介绍 (4)3.Linux多线程编程相关函数介绍 (5)1)主要线程函数介绍 (5)a)线程创建函数pthread_create() (5)b)线程终止函数pthread_exit() (6)c)控制线程同步的函数pthread_exit() (6)2)信号量 (7)a)sem_init() (7)b)sem_wait()和sem_trywait() (7)c)sem_post() (8)d)sem_getvalue() (8)e)sem_destroy() (8)3)互斥锁 (8)a)互斥锁初始化:pthread_mutex_init() (8)b)互斥锁上锁:pthread_mutex_lock() (9)c)互斥锁解锁:pthread_mutex_unlock() (9)d)撤销互斥锁:pthread_mutex_destroy() (9)4.Linux下的多线程编程引例 (9)1)引例一:基本的线程程序——理解Linux多线程程序的基本结构 (9)a)源代码 (9)b)程序解析 (10)2)引例二:两个线程的同时执行——最简单的线程协调模型 (11)a)源代码 (11)b)程序解析 (12)3)引例三:信号量的使用——借助信号量体现多线程分工合作的思想 (12)a)源代码 (12)b)程序解析 (14)4)引例四:使用互斥量——将引例三改为用互斥量实现 (14)a)源代码 (14)b)程序解析 (16)5)引例五:一个简单的真正多个线程的程序——真正的多线程 (16)a)源代码 (16)b)程序解析 (17)c)思考一下吧... .. (18)1.我们为什么要练习多线程?(多线程的好处)1) 提高应用程序响应。
多线程编程之:Linux线程编程9.2 线程编程9.2.1 线程基本编程这里要讲的线程相关操作都是用户空间中的线程的操作。
在Linux中,普通pthread线程库是一套通用的线程库,是由POSIX提出的,因此具有很好的可移植性。
(1)函数解释。
创建线程事实上就是确定调用该线程函数的入口点,这里通常用法的函数是pthread_create()。
在线程创建以后,就开头运行相关的线程函数,在该函数运行完之后,该线程也就退出了,这也是线程退出一种办法。
另一种退出线程的办法是用法函数pthread_exit(),这是线程的主动行为。
这里要注重的是,在用法线程函数时,不能任意用法exit()退出函数举行出错处理,因为exit()的作用是使调用进程终止,往往一个进程包含多个线程,因此,在用法exit()之后,该进程中的全部线程都终止了。
因此,在线程中就可以用法pthread_exit()来代替进程中的exit()。
因为一个进程中的多个线程是分享数据段的,因此通常在线程退出之后,退出线程所占用的资源并不会随着线程的终止而得到释放。
正如进程之间可以用wait()系统调用来同步终止并释放资源一样,线程之间也有类似机制,那就是pthread_join()函数。
pthread_join()可以用于将当前线程挂起来等待线程的结束。
这个函数是一个线程堵塞的函数,调用它的函数将向来等待到被等待的线程结束为止,当函数返回时,被等待线程的资源就被收回。
前面已提到线程调用pthread_exit()函数主动终止自身线程。
但是在无数线程应用中,常常会碰到在别的线程中要终止另一个线程的执行的问题。
此时调用pthread_cancel()函数实现这种功能,但在被取消的线程的内部需要调用pthread_setcancel()函数和pthread_setcanceltype()函数设置自己的取消状态,例如被取消的线第1页共9页。
Linux下c语⾔多线程编程引⾔ 线程(thread)技术早在60年代就被提出,但真正应⽤多线程到中去,是在80年代中期,solaris是这⽅⾯的佼佼者。
传统的Unix也⽀持线程的概念,但是在⼀个进程(process)中只允许有⼀个线程,这样多线程就意味着多进程。
现在,多 为什么有了进程的概念后,还要再引⼊线程呢?使⽤多线程到底有哪些好处?什么的系统应该选⽤多线程?我们⾸先必须回答这些问题。
使⽤多线程的理由之⼀是和进程相⽐,它是⼀种⾮常"节俭"的多任务操作⽅式。
我们知道,在Linux系统下,启动⼀个新的进程必须分配给它独⽴的地址空间,建⽴众多的数据表来维护它的代码段、堆栈段和数据段,这是⼀种"昂贵"的多任务⼯作⽅式。
⽽运⾏于⼀个进程中的多个线程,它们彼此之间使⽤相同的地址空间,共享⼤部分数据,启动⼀个线程所花费的空间远远⼩于启动⼀个进程所花费的空间,⽽且,线程间彼此切换所需的时间也远远⼩于进程间切换所需要的时间。
使⽤多线程的理由之⼆是线程间⽅便的机制。
对不同进程来说,它们具有独⽴的数据空间,要进⾏数据的传递只能通过通信的⽅式进⾏,这种⽅式不仅费时,⽽且很不⽅便。
线程则不然,由于同⼀进程下的线程之间共享数据空间,所以⼀个线程的数据可以直接为其它线程所⽤,这不仅快捷,⽽且⽅便。
当然,数据的共享也带来其他⼀些问题,有的变量不能同时被两个线程所修改,有的⼦程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地⽅。
除了以上所说的优点外,不和进程⽐较,多线程程序作为⼀种多任务、并发的⼯作⽅式,当然有以下的优点: 1) 提⾼应⽤程序响应。
这对图形界⾯的程序尤其有意义,当⼀个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应、、菜单的操作,⽽使⽤多线程技术,将耗时长的操作(time consuming)置于⼀个新的线程,可以避免这种尴尬的情况。
L i n u x线程基础Linux系统下的多线程编程1.1 引言线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。
传统的Unix也支持线程的概念,但是在一个进程(process)中只允许有一个线程,这样多线程就意味着多进程。
现在,多线程技术已经被许多操作系统所支持,包括Windows/NT,当然,也包括Linux。
为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。
1.2使用多线程的理由一是和进程相比,它是一种非常"节俭"的多任务操作方式。
进程是系统中程序执行和资源分配的基本单位。
我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这就导致了进程在进行切换等操作起到了现场保护作用, 这是一种"昂贵"的多任务工作方式。
但是为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销,进程演化中出现了另外一个概念,这就是线程,也被人称为轻量级的进程。
它是一个进程内的基本调度单位。
线程是在共享的内存空间中并发的多道执行路径,它们共享一个进程的资源,比如文件描述符和信号处理等。
因此,大大减少了上下文切换的开销。
而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。
二是线程间方便的通信机制。
对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。
线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。
Linux多线程编程——多线程与线程同步多线程使用多线程好处:一、通过为每种事件类型的处理单独分配线程,可以简化处理异步事件的代码,线程处理事件可以采用同步编程模式,启闭异步编程模式简单二、方便的通信和数据交换由于进程之间具有独立的数据空间,多进程必须使用操作系统提供的复杂机制才能实现内存和文件描述符的共享,导致上下文切换的开销比较大。
而线程之间共享进程的所有资源,所以,多线程可以访问相同的存储空间和文件描述符。
三、对一些不具有互斥型的问题,可以将其分解为从而改善程序的吞吐量。
对于进程,在完成多个任务时,实际上需要将任务串行化。
对于多线程,相互独立而且想不不依赖的任务可以交叉运行,只需要为每个任务分配一个线程即可。
四、交互的程序可以通过使用多线程实现响应时间的改善,多线程可以把程序中用于处理用户输入输出的部分与其他部分分开。
线程包含了进程内执行环境必须的信息,包括进程ID,一组寄存器值,栈,调度优先级和策略,信号屏蔽字,errno变量以及线程私有数据。
线程ID使用pthread_t数据类型来表示,类似于一种结构体,可以使用pthread_self 函数和pthread_equal 函数来通过线程ID识别线程。
原型:#include <pthread.h>int pthread_eaual(pthread_t tid1,pthread_t tid2); //判断两个线程ID是否相等相等返回非0,不相等返回0#include <pthread.h>pthread_t pthread_self(void); //获取自身线程ID返回调用线程的ID线程创建#include <pthread.h>int pthread_creat(pthread_t *restrict tidp,const pthread_attr_t*attr,void*(*start_rtn)(void),void *restrict arg); //创建线程成功返回0,否则返回错误编号tidp 指向的内存单元被设置为新创建的现成的线程IDattr 用于定制线程的线程属性,设置为NULL时,则使用默认属性新创建的函数从strat_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg.若要想向strat_rtn传递不知一个参数,可以将多个参数放在一个结构体中,然后把结构体的地址作为arg参数传入。
linux下c语⾔的多线程编程我们在写linux的服务的时候,经常会⽤到linux的多线程技术以提⾼程序性能多线程的⼀些⼩知识:⼀个应⽤程序可以启动若⼲个线程。
线程(Lightweight Process,LWP),是程序执⾏的最⼩单元。
⼀般⼀个最简单的程序最少会有⼀个线程,就是程序本⾝,也就是主函数(单线程的进程可以简单的认为只有⼀个线程的进程)⼀个线程阻塞并不会影响到另外⼀个线程。
多线程的进程可以尽可能的利⽤系统CPU资源。
1创建线程先上⼀段在⼀个进程中创建⼀个线程的简单的代码,然后慢慢深⼊。
#include<pthread.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>void * func(void * arg){printf("func run...\n");return NULL;}int main(){pthread_t t1;int err = pthread_create(&t1,NULL,func,NULL);if(err!=0){printf("thread_create Failed:%s\n",strerror(errno));}else{printf("thread_create success\n");}sleep(1);return EXIT_SUCCESS;}int pthread_create(pthread_t *thread,const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);在main函数⾥⾯我们调⽤上⾯的函数进⾏创建⼀个线程。
函数参数: 第⼀个参数:pthread_t代表创建线程的唯⼀标识,是⼀个结构体,需要我们创建好后,将这个结构体的指针传递过去。
linux c语言多线程代码摘要:1.Linux C 语言多线程编程简介2.Linux C 语言多线程编程的基本概念3.Linux C 语言多线程编程的步骤4.Linux C 语言多线程编程的实例代码5.总结正文:【1.Linux C 语言多线程编程简介】Linux C 语言多线程编程是指在Linux 操作系统下,使用C 语言编写具有多个执行线程的程序。
多线程能够实现程序的并发执行,从而提高程序的执行效率和响应速度。
Linux 系统提供了丰富的多线程编程库,如pthread.h,使得C 语言程序员能够方便地编写多线程程序。
【2.Linux C 语言多线程编程的基本概念】在Linux C 语言多线程编程中,有几个基本概念需要了解:1.线程:线程是程序执行的基本单位,是程序在执行过程中的一个实体。
每个线程都拥有独立的栈和局部变量,但共享全局变量和文件描述符等。
2.进程:进程是程序在操作系统中的一个实例,是资源分配的基本单位。
一个进程可以包含一个或多个线程,每个线程都运行在进程的上下文中。
3.多线程:多线程是指在一个程序中有多个线程同时执行。
多线程能够实现程序的并发执行,从而提高程序的执行效率和响应速度。
4.并发与并行:并发是指多个线程在程序中同时执行,但并不一定是同时执行在同一个CPU 核心上;而并行是指多个线程在同一时刻执行在不同的CPU 核心上。
【3.Linux C 语言多线程编程的步骤】编写Linux C 语言多线程程序的一般步骤如下:1.包含头文件:在程序中包含必要的头文件,如#include <pthread.h>。
2.创建线程:使用pthread_create() 函数创建一个新线程。
pthread_create() 函数需要四个参数:线程ID、线程属性、线程入口函数和线程入口函数的参数。
3.启动线程:使用pthread_start() 函数启动一个新线程。
4.线程同步:在多线程程序中,为了防止多个线程同时访问共享资源导致数据混乱,需要使用线程同步机制。
linuxC多线程编程⼊门(基本API及多线程的同步与互斥)介绍:什么是线程,线程的优点是什么?线程在unix下,被称为轻量级的进程,线程虽然不是进程,但却可以看作是unix进程的表亲,同⼀进程中的多条线程将共享该进程中的全部资源,如虚拟地址空间,⽂件描述服,和信号处理等等。
但同⼀进程中的多个线程有各⾃的调⽤占(call stack),⾃⼰的寄存器环境(register context),⾃⼰的线程本地存储(thread-local storage)。
⼀个进程可以有很多线程,每条线程执⾏不同的任务。
线程可以提⾼应⽤程序在多核环境下处理诸如⽂件I/O或者socket I/O 等会产⽣堵塞的情况的表现性能。
在unix系统中,⼀个进程包含很多东西,包括可执⾏的程序,以及⼀⼤堆诸如⽂件描述符地址空间等资源。
在很多情况下,完成相关任务的不同代码间需要交换数据。
如果采⽤多进程的⽅式,那么通信就需要在⽤户空间和内核空间进频繁的切换,开销很多⼤。
但是如果使⽤多线程的⽅式,因为可以使⽤共享的全局变量,所以线程间的通信(数据交换)变得⾼效⾮常。
hello world(线程创建,结束,等待)创建线程:pthread_create()线程创建函数包含四个变量:1、⼀个线程变量名,被创建线程的标识。
2、线程的属性指针,缺省为NULL即可。
3、被创建线程的程序代码 4、程序的代码的参数:for example :-pthread_t thrd1;-pthread_attr_t attr; -void thread_function(void argument);-char *some_argument;1 2int pthread_create(pthread_t *thread,pthread_attr_t *attr ,void*(*func), void*arg);返回值 0成功,返回 errcode 失败结束线程:pthread_exit()线程结束调⽤pthread_exit(void * retval);//retval⽤于存放进程结束的退出状态。
第八章嵌入式Linux多线程编程8.1线程基本概念8.1.1 Linux线程简介Linux中的线程是轻量级线程(lightweight thread),Linux中的线程调度是由内核调度程序完成的,每个线程有自己的ID号。
与进程相比,它们消耗的系统资源较少、创建较快、相互间的通信也较容易。
存在于同一进程中的线程会共享一些信息,这些信息包括全局变量、进程指令、大部分数据、信号处理程序和信号设置、打开的文件、当前工作的目录以及用户ID和用户组ID。
同时作为一个独立的线程,它们又拥有一些区别于其他线程的信息,包括线程ID、寄存器集合(如程序计数器和堆栈指针)、堆栈、错误号、信号掩码以及线程优先权。
Linux线程分为两类:一是核心级支持线程。
在核心级实现线程时,线程的实现依赖于内核。
无论是在用户进程中的线程还是系统进程中的线程,它们的创建、撤销、切换都由内核实现。
内核感知线程的存在并对其进行控制,并且允许不同进程里的线程按照同一相对优先方法调度,这适合于发挥多处理器的并发优点。
当某一个线程发生阻塞时,阻塞的是该线程本身,线程所在进程中的其它线程依然可以参加线程调度。
在用户级实现线程时,没有核心支持的多线程进程。
因此,核心只有单线程进程概念,而多线程进程由与应用程序连接的过程库实现。
核心不知道线程的存在也就不能独立的调度这些线程了。
如果一个线程调用了一个阻塞的系统调用,进程可能被阻塞,当然其中的所有线程也同时被阻塞。
目前Linux众多的线程库中大部分实现的是用户级的线程,只有一些用于研究的线程库才尝试实现核心级线程。
系统创建线程如下:当一个进程启动后,它会自动创建一个线程即主线程(main thread)或者初始化线程(initial thread),然后就利用pthread_initialize()初始化系统管理线程并且启动线程机制。
线程机制启动后,要创建线程必须让pthread_create ()向管理线程发送REQ_CREATE请求, 管理线程即调用pthread_handle_create()创建新线程。
声明:本文是网上整理的资料,版权属其作者本人所有。
声明:本文是网上整理的资料,版权属其作者本人所有。
(1)第一章线程基础知识 (2)一.什么是线程 (2)二.线程的优点 (2)三.线程的缺点 (2)四.线程的结构 (2)五.线程标识 (2)六.线程的创建 (3)七..线程的终止 (4)八、一次性初始化 (7)九、线程的私有数据 (9)第二章线程高级知识 (10)一.线程属性 (10)二、线程的分离状态 (11)三、线程的继承性 (12)四、线程的调度策略 (13)五、线程的调度参数 (13)六、线程的作用域 (16)七、线程堆栈的大小 (16)八、线程堆栈的地址 (17)九、线程栈末尾的警戒缓冲区大小 (18)第三章Posix有名信号灯 (18)一、posix有名信号灯函数 (18)二、关于posix有名信号灯使用的几点注意 (23)三、posix有名信号灯应用于多线程 (24)四、posix有名信号灯应用于多进程 (25)五、基于内存的信号灯 (28)第四章互斥量 (38)一、什么是互斥锁 (38)二、初始化/回收互斥锁 (39)三、对互斥量加减锁 (39)四、互斥锁属性 (44)五、应用互斥量需要注意的几点 (46)第五章条件变量 (46)一、什么是条件变量 (46)二、条件变量函数 (47)三、条件变量属性 (52)四、条件变量与互斥锁、信号量的区别 (53)第六章共享内存 (54)一、什么是共享内存区 (54)二、mmap (54)三、posix共享内存函数 (58)四、ftruncate和fstat函数 (60)五、共享内存区的写入和读出 (61)六、程序例子 (62)第一章线程基础知识一.什么是线程在一个程序里的多个执行路线就叫做线程。
更准确的定义是:线程是“一个进程内部的一个控制序列”。
典型的unix进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。
有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各只独立的任务。