笔记九:线程间的通信(pthread_create()和pthread_self())
linux高级编程之线程间的通信:(pthread_create()、pthread_self())1.线程概念 线程包含了表示进程内执行环境必须得信息,其中包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述
·
linux高级编程之线程间的通信:(pthread_create()、pthread_self())
1.线程概念
线程包含了表示进程内执行环境必须得信息,其中包括进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量以及线程私有数据。进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。
线程优点:
●通过为每种事件类型的处理分配单独的线程,能够简化处理异步事件的代码。每个线程在进行事件处理时可以采用同步编程模式,同步编程模式要比异步编程模式简单的多。
●多线程程序在单处理器上运行能够改善响应时间和吞吐量。
●在只有一个线程的情况下,单个进程需要完成多个任务时,实际需要把这些任务串行化;有了多个控制线程,相互独立的任务的处理就可以交叉进行,只需要为每个任务分配一个单独的线程,当然只有在处理过程不依赖的情况下,两个任务的执行才可以穿插进行。
●交互的程序同样可以通过使用多线程实现响应时间的改善,多线程可以把程序中处理用户输入输出的部分与其他部分分开。
2.线程标识
回忆一下进程ID,它使用pid_t数据类型来表示,是一个非负整数,同样线程也有线程ID,线程则用pthread_t数据类型来表示,实现的时候可以用一个结构来代表pthread_t数据类型,所以可移植的操作系统实现不能把它作为整数处理。因此必须使用函数来对两个线程进行比较。
pthread_equal()函数
● 头文件: #include <pthread.h>
函数原型:int pthread_equal(pthread_t tid1,pthread_t tid2);
返回值:若相等则返回非0,不相等则返回0
● 线程可以通过调用pthread_self()函数获得自身的线程ID。
pthread_self()函数
头文件: #include<pthread.h>
函数原型:pthread_t pthread_self(void)
3.线程创建
直接简单明了的说吧,新增线程我们可以通过pthread_create()函数创建。
● 头文件:#include <pthread.h>
函数原型:
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_rtn)(void *), void *arg)
函数功能:创建一个线程
thread:线程标识符(如:pthread_t tid)
arrt:用于定制各种不同线程的属性,一般为NULL(默认创建线程属性)
start_rtn:重点说明下,新创建的线程从start_rtn函数的起始地址开始运行,该函数只有一个无类型指针参数arg
,如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入
接下来是一个关pthread_create()和pthread_self()函数的一个简单例子
运行结果如下:
从以上打印信息我们也可以得出刚开始线程概念相关的结论:进程的所有信息对该进程的所有线程都是共享的,包括可执行的程序文本、程序的全局内存和堆内存、栈以及文件描述符。
更多推荐
已为社区贡献2条内容
所有评论(0)