1 / 66
文档名称:

多线程程序设计forLinux.docx

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

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

分享

预览

多线程程序设计forLinux.docx

上传人:63229029 2017/10/11 文件大小:676 KB

下载得到文件列表

多线程程序设计forLinux.docx

文档介绍

文档介绍:声明: 本文是网上整理的资料, 版权属其作者本人所
有。
第一章线程基础知识
一. 什么是线程在一个程序里的多个执行路线就叫做线程。更准确的定义是:线程是“一个
进程内部的一个控制序列”。
典型的 unix 进程可以看成只有一个控制线程:一个进程在同一时刻只做一
件事情。有了多个控制线程以后,在程序设计时可以把进程设计成在同一时刻能
够做不止一件事,每个线程处理各只独立的任务。
二. 线程的优点
(1) 通过为每种事件类型的处理分配单独的线程,能够简化处理异步时间
的代码。
(2) 多个线程可以自动共享相同的存储地址空间和文件描述符。
(3) 有些问题可以通过将其分解从而改善整个程序的吞吐量。
(4) 交互的程序可以通过使用多线程实现相应时间的改善,多线程可以把
程序中处理用户输入输出的部分与其它部分分开。
三. 线程的缺点线程也有不足之处。编写多线程程序需要更全面更深入的思考。在一个多线
程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的。调试一个多线程程序也比调试一个单线程程序困难得多
四. 线程的结构线程包含了表示进程内执行环境必需的信息,其中包括进程中标识线程的
线程 ID,一组寄存器值、栈、调度优先级和策略、信号屏蔽子,errno 变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本,程序的全局内存和堆内存、栈以及文件描述符。
五. 线程标识
就像每个进程有一个进程 ID 一样,每个线程也有一个线程 ID,进程 ID 在
整个系统中是唯一的,但线程不同,线程 ID 只在它所属的进程环境中有效。线
程 ID 用 pthread_t 数据类型来表示,实现的时候可以用一个结构来代表 pthread_t
数据类型,所以可以移植的操作系统不能把它作为整数处理。因此必须使用函数
来对来对两个线程 ID 进行比较。
1.
名称::
pthread_equal
功能:
比较两个线程 ID
头文件:
#include <>
函数原形:
int pthread_equal(pthread_t tid1,pthread_t tid2);
参数:
tid1 进程 1id
tid2 进程 2id
返回值:
若相等返回非 0 值,否则返回 0
2.
名称::
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 否则

最近更新

2024年临床执业医师考试真题附参考答案【精练.. 28页

2024年事业单位考试《言语理解与表达》题库及.. 178页

2024年事业单位考试《言语理解与表达》题库(.. 175页

2024年事业单位考试常识判断题200道精品(夺分.. 79页

2024年公务员考试《数量关系题》题库含答案【.. 107页

2024年公务员考试《言语理解与表达》题库及参.. 174页

2024年公务员考试《言语理解与表达》题库附答.. 174页

2024年兵团直属校园招聘考试笔试试题附完整答.. 248页

2024年吉林工信厅直属事业单位公开招聘历年高.. 166页

2024年吉林延边州直部分事业单位招聘急需人才.. 168页

2024年吉林松原前郭县事业单位(含专项)招聘42.. 165页

2024年吉林省人力资源和社会保障厅及直属参公.. 162页

2024年吉林省延边事业单位招聘历年高频难、易.. 162页

2024年校园招聘考试笔试试题500道及答案【典优.. 245页

七年级诗词大会题库及答案(新) 8页

2024年随笔作文300字三篇 3页

公务员考试《数量关系题》题库及完整答案(网.. 107页

河南省高校教师岗前培训《高等教育学》题目10.. 23页

公务员考试《数量关系题》题库及参考答案(名.. 108页

《沉与浮作业设计方案》 3页

人力资源调研方案 2页

C15埋石混凝土施工技术交底 2页

TC混响器参数设置详解 6页

《大扫除》看图写话教学设计 3页

2022年上半年驻村第一书记工作总结(6篇) 39页

气管镜检查术的护理配合 19页

从伟大建党精神中汲取智慧和力量党课讲稿 10页

领导力培训领导力提升培训-领导力培训 66页

自动售货机的设计论文 23页

快乐童年与梦想一起飞ppt课件 14页