实验七:linux多线程编程(实验报告)

实验七:linux多线程编程(实验报告)

ID:19571627

大小:21.36 KB

页数:11页

时间:2018-10-03

实验七:linux多线程编程(实验报告)_第1页
实验七:linux多线程编程(实验报告)_第2页
实验七:linux多线程编程(实验报告)_第3页
实验七:linux多线程编程(实验报告)_第4页
实验七:linux多线程编程(实验报告)_第5页
实验七:linux多线程编程(实验报告)_第6页
实验七:linux多线程编程(实验报告)_第7页
实验七:linux多线程编程(实验报告)_第8页
实验七:linux多线程编程(实验报告)_第9页
实验七:linux多线程编程(实验报告)_第10页
资源描述:

《实验七:linux多线程编程(实验报告)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验七:Linux多线程编程(实验报告)实验七:Linux多线程编程(4课时)实验目的:掌握线程的概念;熟悉Linux下线程程序编译的过程;掌握多线程程序编写方法。实验原理:为什么有了进程的概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么的系统应该选用多线程?我们首先必须回答这些问题。1多线程概念使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间。使用多线程的理由之二是线程间方便

2、的通信机制。同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。2多线程编程函数Linux系统下的多线程遵循POSIX线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件pthread.h,连接时需要使用库libpthread.a。pthread_t在头文件/usr/include/bits/pthreadtypes.h中定义:typedefunsignedlongintpthread_t;它是一个线程的标识符。函数pthread_create用来创建一个线程,它的原型为

3、:externintpthread_create((pthread_t*thread,constpthread_attr_t*attr,void*(*start_routine)(void*),void*arg));第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。函数pthread_join用来等待一个线程的结束。函数原型为:externintpthread_join(pthread_tth,void**thread_return);第一个参数为被等待的线程标

4、识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。函数pthread_exit的函数原型为:externvoidpthread_exit(void*retval);唯一的参数是函数的返回代码,只要pthread_join中的第二个参数thread_return不是NULL,这个值将被传递给thread_return。3修改线程的属性线程属性结构为pthread_attr_t,它在头文件/usr/include/pthread.h中定义。属性值不能直接设置,须使用相关函数进行操作,初始化的函数为pthread_attr

5、_init,这个函数必须在pthread_create函数之前调用。设置线程绑定状态的函数为pthread_attr_setscope,它有两个参数,第一个是指向属性结构的指针,第二个是绑定类型,它有两个取值:PTHREAD_SCOPE_SYSTEM(绑定的)和PTHREAD_SCOPE_PROCESS(非绑定的)。另外一个可能常用的属性是线程的优先级,它存放在结构sched_param中。用函数pthread_attr_getschedparam和函数pthread_attr_setschedparam进行存放,一般说来,我们总是先取优

6、先级,对取得的值修改后再存放回去。4线程的数据处理和进程相比,线程的最大优点之一是数据的共享性,各个进程共享父进程处沿袭的数据段,可以方便的获得、修改数据。但这也给多线程编程带来了许多问题。我们必须当心有多个不同的进程访问相同的变量。许多函数是不可重入的,即同时不能运行一个函数的多个拷贝(除非使用不同的数据段)。在函数中声明的静态变量常常带来问题,函数的返回值也会有问题。互斥锁互斥锁用来保证一段时间内只有一个线程在执行一段代码。必要性显而易见:假设各个线程向同一个文件顺序写入数据,最后得到的结果一定是灾难性的。条件变量互斥锁一个明显的缺点

7、是它只有两种状态:锁定和非锁定。而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。信号量信号量既可以作为二值计数器(即0,1),也可以作为资源计数器.信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。当公共资源增加时,调用函数sem_post()增加信号量。只有当信号量值大于0时,才能使用公共资源,使用后,函数sem_wait()减少信号量。函数sem_trywait()和函数pt

8、hread_mutex_trylock()起同样的作用,它是函数sem_wait()的非阻塞版本。实验内容:线程函数编译时需要添加特殊编译选项:gcc*.c-lpthread-o1、完成教材上

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

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

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