1 / 11
文档名称:

实验七Linux多线程编程实验报告样稿.docx

格式:docx   大小:20KB   页数:11页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

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

分享

预览

实验七Linux多线程编程实验报告样稿.docx

上传人:非学无以广才 2020/11/27 文件大小:20 KB

下载得到文件列表

实验七Linux多线程编程实验报告样稿.docx

文档介绍

文档介绍:试验七:Linux多线程编程(4课时)
试验目标:掌握线程概念;熟悉Linux下线程程序编译过程;掌握多线程程序编写方法。
试验原理:为何有了进程概念后,还要再引入线程呢?使用多线程到底有哪些好处?什么系统应该选择多线程?我们首先必需回复这些问题。
1 多线程概念
使用多线程理由之一是和进程相比,它是一个很"节俭"多任务操作方法。运行于一个进程中多个线程,它们相互之间使用相同地址空间,共享大部分数据,开启一个线程所花费空间远远小于开启一个进程所花费空间。
使用多线程理由之二是线程间方便通信机制。同一进程下线程之间共享数据空间,所以一个线程数据能够直接为其它线程所用,这不仅快捷,而且方便。
2多线程编程函数
Linux系统下多线程遵照POSIX线程接口,称为pthread。编写Linux下多线程程序,,。
pthread_t在头文件/usr/include/bits/:
typedef unsigned long int pthread_t; 它是一个线程标识符。
函数pthread_create用来创建一个线程,它原型为:
extern int pthread_create((pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg));
第一个参数为指向线程标识符指针,第二个参数用来设置线程属性,第三个参数是线程运行函数起始地址,最终一个参数是运行函数参数。
函数pthread_join用来等候一个线程结束。函数原型为:
extern int pthread_join(pthread_t th, void **thread_return);
第一个参数为被等候线程标识符,第二个参数为一个用户定义指针,它能够用来存放被等候线程返回值。
函数pthread_exit函数原型为:
extern void pthread_exit(void *retval);
唯一参数是函数返回代码,只要pthread_join中第二个参数thread_return不是NULL,这个值将被传输给 thread_return。
3 修改线程属性
线程属性结构为pthread_attr_t,它在头文件/usr/include/。属性值不能直接设置,须使用相关函数进行操作,初始化函数为pthread_attr_init,这个函数必需在pthread_create函数之前调用。
设置线程绑定状态函数为 pthread_attr_setscope,它有两个参数,第一个是指向属性结构指针,第二个是绑定类型,它有两个取值:PTHREAD_SCOPE_SYSTEM(绑定)和PTHREAD_SCOPE_PROCESS(非绑定)。
另外一个可能常见属性是线程优先级,它存放在结构sched_param中。用函数pthread_attr_getschedparam和函数 pthread_attr_setschedparam进行存放,通常说来,我们总是先取优先级,对取得值修改后再存放回去。
4 线程数据处理
和进程相比,线程最大优点之一是数据共享性,各个进程共享父进程处沿袭数据段,能够方便取得、修改数据。但这也给多线程编程带来了很多问题。我们必需当心有多个不一样进程访问相同变量。很多函数是不可重入,即同时不能运行一个函数多个拷贝(除非使用不一样数据段)。在函数中申明静态变量常常带来问题,函数返回值也会有问题。
互斥锁
互斥锁用来确保一段时间内只有一个线程在实施一段代码。必需性显而易见:假设各个线程向同一个文件次序写入数据,最终得到结果一定是灾难性。
条件变量
互斥锁一个显著缺点是它只有两种状态:锁定和非锁定。而条件变量经过许可线程阻塞和等候另一个线程发送信号方法填补了互斥锁不足,它常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开对应互斥锁并等候条件发生改变。
信号量
信号量既能够作为二值计数器(即0,1),也能够作为资源计数器.
信号量本质上是一个非负整数计数器,它被用来控制对公共资源访问。当公共资源增加时,调用函数sem_post()增加信号量。只有当信号量值大于0时,才能使用公共资源,使用后,函数sem_wait()降低信号量。函数sem_trywait()和函数pthread_ mutex_trylock()起一样作用,它是函数sem_wait()非阻塞版本。