77范文网 - 专业文章范例文档资料分享平台

linux多线程编程

来源:网络收集 时间:2019-02-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

声明:本文是网上整理的资料,版权属其作者本人所有。

声明:本文是网上整理的资料,版权属其作者本人所有。................................................ 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进程可以看成只有一个控制线程:一个进程在同一时刻只做一件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能够做不止一件事,每个线程处理各只独立的任务。

二.线程的优点

(1) 通过为每种事件类型的处理分配单独的线程,能够简化处理异步时间的代码。

(2) 多个线程可以自动共享相同的存储地址空间和文件描述符。 (3) 有些问题可以通过将其分解从而改善整个程序的吞吐量。

(4) 交互的程序可以通过使用多线程实现相应时间的改善,多线程可以把程序中处理用户输入输出的部分与其它部分分开。

三.线程的缺点

线程也有不足之处。编写多线程程序需要更全面更深入的思考。在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的。调试一个多线程程序也比调试一个单线程程序困难得多。

四.线程的结构

线程包含了表示进程内执行环境必需的信息,其中包括进程中标识线程的线程ID,一组寄存器值、栈、调度优先级和策略、信号屏蔽子,errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本,程序的全局内存和堆内存、栈以及文件描述符。

五.线程标识

就像每个进程有一个进程ID一样,每个线程也有一个线程ID,进程ID在整个系统中是唯一的,但线程不同,线程ID只在它所属的进程环境中有效。线程ID用pthread_t数据类型来表示,实现的时候可以用一个结构来代表pthread_t数据类型,所以可以移植的操作系统不能把它作为整数处理。因此必须使用函数来对来对两个线程ID进行比较。

1. 名称:: 功能: 头文件: pthread_equal 比较两个线程ID #include 函数原形: 参数: 返回值: 2.

int pthread_equal(pthread_t tid1,pthread_t tid2); tid1 进程1id tid2 进程2id 若相等返回非0值,否则返回0 名称:: 功能: 头文件: 函数原形: 参数: 返回值:

pthread_self 获取自身线程的id #include pthread_t pthread_self(void); 无 调用线程的线程id 六.线程的创建 3.

名称:: 功能: 头文件: 函数原形: 参数: 返回值:

pthread_create 创建线程 #include int pthread_create(pthread_t *restrict tidp,const pthread _attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg); 若成功返回则返回0,否则返回错误编号 当pthread_creat成功返回时, tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于定制各种不同的线程属性。可以把它设置为NULL,创建默认的线程属性。

新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型指针参数arg,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。 #include void printids(const char *s) { printf(“%s pid:%u tid:%u \\n“, s,getpid(),pthread_self()); } void *thr_fn(void *arg) { printids(“new thread: “); } int main() { int err; pthread_t tid; err=pthread_create(&tid,NULL,thr_fn,NULL); if(err=0) printf(“can’t create thread:%s\\n”,strerror(err)); printids(“main thread: “); sleep(1); exit(0); } 关于进程的编译我们都要加上参数 –lpthread 否则提示找不到函数的错误。 具体编译方法是 cc –lpthread –o gettid gettid.c 运行结果为

main thread: pid 14954 tid 134529024 new thread: pid 14955 tid 134530048

七..线程的终止

线程是依进程而存在的,当进程终止时,线程也就终止了。当然也有在不终止整个进程的情况下停止它的控制流。

(1)线程只是从启动例程中返回,返回值是线程的退出码。 (2)线程可以被同一进程中的其他线程取消。 (3)线程调用pthread_exit. 4. 名称:: pthread_exit 功能: 终止一个线程 头文件: #include 函数原形: void pthread_exit(void *rval_ptr); 参数: 返回值: 无

rval_prt是一个无类型指针,与传给启动例程的单个参数类似。进程中的其他线程可以调用pthread_join函数访问到这个指针。 5. 名称:: pthread_join 功能: 获得进程的终止状态 头文件: #include 函数原形: int pthread_join(pthread_t thread,void **rval_ptr); 参数: 返回值: 若成功返回0,否则返回错误编号。

当一个线程通过调用pthread_exit退出或者简单地从启动历程中返回时,进程中的其他线程可以通过调用pthread_join函数获得进程的退出状态。调用

pthread_join进程将一直阻塞,直到指定的线程调用pthread_exit,从启动例程中或者被取消。

如果线程只是从它的启动历程返回,rval_ptr将包含返回码。

#include #include void *thr_fn1(void *arg) { printf(“thread 1 returning\\n”); return((void *)1); } void *thr_fn2(void *arg) { printf(“thread 2 exiting\\n”); return((void *)2); } int main() { pthread_t tid1,tid2; void *tret; pthread_create(&tid1,NULL,thr_fn1,NULL); pthread_create(&tid2,NULL,thr_fn2,NULL); pthread_join(tid1,&tret); printf(“thread 1 exit code %d\\n”,(int)tret); pthread_join(tid2,&tret); printf(“thread 2 exit code %d\\n”,(int)tret); exit(0); }

运行结果是: thread 1 returning thread 2 exiting thread 1 exit code 1 thread 2 exit code 2

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库linux多线程编程在线全文阅读。

linux多线程编程.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/476124.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: