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