《4-1_POSIX的一些基本知识.ppt》由会员分享,可在线阅读,更多相关《4-1_POSIX的一些基本知识.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第四章第四章 Linux多线程编程多线程编程1为什么选为什么选linux平台?平台?1、Linux是开源的,技术人员应该多用是开源的,技术人员应该多用linux,能学到很多东西。,能学到很多东西。Windows就是个黑箱,就是个黑箱,用久了就成了他的奴隶。用久了就成了他的奴隶。3、进行嵌入式开发时大多需要、进行嵌入式开发时大多需要Linux平台,希平台,希望大家提前熟悉望大家提前熟悉Linux。2、Linux时下比较流行,使用者日益增多,并时下比较流行,使用者日益增多,并且应用软件日益丰富。且应用软件日益丰富。24、Linux 社群是一个活跃的、乐于助人的团体。社群是一个活跃的、乐于助人的团体
2、。假如你的系统崩溃了,或是遇到了其他任何形假如你的系统崩溃了,或是遇到了其他任何形式的问题,都会有一个庞大的队伍站在你身后,式的问题,都会有一个庞大的队伍站在你身后,向你伸出援手,积极地帮助你。向你伸出援手,积极地帮助你。5、微软打击盗版,如果你不愿花钱买正版,、微软打击盗版,如果你不愿花钱买正版,也许不久你就会投入到也许不久你就会投入到Linux的怀抱,因为的怀抱,因为Linux 是免费的是免费的。多样化的版本选择多样化的版本选择 安全安全6、Intel提供的一些工具软件,提供的一些工具软件,windows平平台下的是要收费的,而台下的是要收费的,而linux平台下的是免平台下的是免费的。费
3、的。ubuntu debian fedora Mandriva 3什么是什么是Linux操作系统?操作系统?其实其实Linux不能算是一个操作系统,严格来讲,不能算是一个操作系统,严格来讲,Linux只是一个操作系统中的内核。只是一个操作系统中的内核。内核是什么?内核是什么?内核建立了计算机软件与硬件之间通讯的平台,内核建立了计算机软件与硬件之间通讯的平台,即通常我们所说的协议层,内核只提供系统服务,即通常我们所说的协议层,内核只提供系统服务,比如文件管理、虚拟内存、设备比如文件管理、虚拟内存、设备I/O等,与硬件等,与硬件本身无关。本身无关。4真正的真正的linux只是一个系统核心,而各种只
4、是一个系统核心,而各种linux发行版发行版所带的软件多数都是所带的软件多数都是GNU提供的,包括相当重要的提供的,包括相当重要的系统软件,比如系统软件,比如C语言编译器,语言编译器,shell等。就连最常等。就连最常用的用的ls命令也是来自命令也是来自GNU的的 fileutils.那么我们通常所说的那么我们通常所说的Linux操作系统又是什么?操作系统又是什么?我们通常所说的我们通常所说的Linux,指,指GNU/Linux,即采用,即采用Linux内核的内核的 GNU操作系统。例如,操作系统。例如,Debian、Red Hat等。等。5GNU:GNU 的本意代表的本意代表“Gnus No
5、t Unix”,虽然如此,虽然如此,它却是一个与它却是一个与 UNIX 完全相容的软件系统。完全相容的软件系统。不同之处在于,不同之处在于,GNU 提供的是提供的是 free 的软件,而的软件,而 UNIX 却是一个要付费的软件系统。却是一个要付费的软件系统。GNU 之所以与之所以与 UNIX 完全相容,是因为完全相容,是因为 UNIX 的的使用者很多,为了让使用者很多,为了让 UNIX 的使用者在使用的使用者在使用 GNU 的时候不会有疏离的感觉,所以的时候不会有疏离的感觉,所以 GNU 尽量与尽量与UNIX 相容,它的相容只是看起来与用起来像相容,它的相容只是看起来与用起来像 UNIX 而
6、已,而已,GNU 其实改进了所多其实改进了所多 UNIX 的缺点,的缺点,使它能尽量完美。使它能尽量完美。GNU 是是 Richard Stallman 於於 1975 年,在年,在 MIT 所所成立的成立的 Free Software Foundation(FSF)中所执行)中所执行的一项计划。的一项计划。64.1 POSIX与与Pthreads线程库简介线程库简介4.2 Pthreads提供的基本线程操作函数提供的基本线程操作函数4.3 线程的互斥与同步线程的互斥与同步4.4 使用使用GDB调试线程以及线程的调优调试线程以及线程的调优4.5 使用使用Pthread库的综合实例库的综合实例本
7、章的主要内容:本章的主要内容:104.1 POSIX与与Pthreads线程库简介线程库简介(1)POSIX简介简介(2)Pthreads线程库简介线程库简介11 Portable Operating System Interface 可移植操作系统接口可移植操作系统接口(1)POSIX简介简介POSIX 标准是由标准是由IEEE(Institute of Electrical and Electronics Engineers,电气和电子工程师,电气和电子工程师协会)开发协会)开发,是由,是由ANSI(American National Standards Institute,美国国家标准学
8、会,美国国家标准学会)和)和ISO(International Organization for Standardization,国际标准化组织,国际标准化组织)标准化。)标准化。缩写为缩写为 POSIX 是为了读音更像是为了读音更像 UNIX.12POSIX的诞生和的诞生和Unix的发展是密不可分的的发展是密不可分的.由于各厂家对由于各厂家对Unix的开发各自为政,造成了的开发各自为政,造成了Unix的版本相当混乱,给软件的可移植性带来很大困的版本相当混乱,给软件的可移植性带来很大困难,对难,对Unix的发展极为不利。的发展极为不利。为结束这种局面,为结束这种局面,IEEE开发了开发了POS
9、IX,POSIX在源代码级别上定义了一组最小的在源代码级别上定义了一组最小的Unix(类类Unix)操作系统接口。操作系统接口。然而,然而,POSIX 并不局限于并不局限于 UNIX。许多其它的。许多其它的操作系统,例如操作系统,例如 Microsoft Windows NT,Linux等都支持(部分)等都支持(部分)POSIX 标准标准.13POSIX 现在已经发展成为一个非常庞大的标现在已经发展成为一个非常庞大的标准族,某些部分正处在开发过程中。准族,某些部分正处在开发过程中。14(2)其目的是为了提高)其目的是为了提高 UNIX 环境下环境下应用程序源应用程序源代码级的可移植性。代码级的
10、可移植性。(3)也就是说,为一个)也就是说,为一个POSIX兼容的操作系统兼容的操作系统编写的程序,应该可以在任何其它的编写的程序,应该可以在任何其它的POSIX操作操作系统(即使是来自另一个厂商)上编译运行。系统(即使是来自另一个厂商)上编译运行。(1)POSIX标准定义了操作系统应该为应用标准定义了操作系统应该为应用程序提供的接口:系统调用集。程序提供的接口:系统调用集。总之:总之:Linux与与UNIX这么相象的另一个原因就是他们这么相象的另一个原因就是他们都遵循都遵循POSIX标准。标准。15(2)Pthread线程库简介线程库简介POSIX 1003.1c定义了处理线程的一系列定义了
11、处理线程的一系列C语言类语言类型的型的API函数,提供了一个可移植的多线程库,称函数,提供了一个可移植的多线程库,称为为Pthreads。Pthreads现在已成为现在已成为Linux操作系统中多线程接口操作系统中多线程接口的标准,并且广泛使用在大多数的的标准,并且广泛使用在大多数的unix平台上。针平台上。针对对Windows操作系统,操作系统,Pthreads也存在一个开放源也存在一个开放源代码的版本,称为代码的版本,称为pthreads-win32。如果打算使用如果打算使用C语言开发多线程程序,并且需要一语言开发多线程程序,并且需要一个能比个能比OpenMP提供更多直接控制的可移植的提供
12、更多直接控制的可移植的API,那么,那么Pthreads是一个很好的选择。是一个很好的选择。16Pthreads库的函数原形定义在库的函数原形定义在中,在中,在编写多线程程序时需要编写多线程程序时需要include该头文件。该头文件。编译时需要连接编译时需要连接libpthread库。(库。(-lpthread)Pthread本来是一套用户级线程库本来是一套用户级线程库,但在但在Linux上上实现时实现时,却使用了内核级线程来完成却使用了内核级线程来完成,这样的好这样的好处是处是,可以充分的提高程序的并发性可以充分的提高程序的并发性.POSIX API 没有限定线程应该如何工作,因此对没有限定
13、线程应该如何工作,因此对于如何去编制线程程序就留有了很大的余地。于如何去编制线程程序就留有了很大的余地。GNU有有pth(GNU Portable Threads)是用户级线程。是用户级线程。可以通过可以通过_POSIX_THREADS宏测试系统是否支持宏测试系统是否支持Pthread.#ifdef _POSIX_THREADS 17 前前缀功能集合功能集合pthread_线程或子线程线程或子线程pthread_attr_线程对象属性线程对象属性pthread_mutex_互斥量互斥量pthread_mutexattr_互斥量对象属性互斥量对象属性pthread_cond_条件变量条件变量pt
14、hread_condattr_条件变量属性条件变量属性Pthread线程库提供的函数一般都已线程库提供的函数一般都已pthread开头,开头,例如:例如:18测试程序运行的时间:测试程序运行的时间:结构结构timeval的定义为:的定义为:strut timeval long tv_sec;/*秒数秒数*/long tv_usec;/*微秒数微秒数*/;gettimeofday(struct timeval*tp);The gettimeofday()function shall obtain the current time,expressed as seconds and microseconds since the Epoch,and store it in the timeval structure pointed to by tp.19可以看出,使用这种方式计时,精度可达微秒,可以看出,使用这种方式计时,精度可达微秒,也就是也就是10-6秒。进行计时的时候,我们需要前后调秒。进行计时的时候,我们需要前后调用两次用两次gettimeofday,然后计算中间的差值,然后计算中间的差值.例:例:programruntime.c20