消息队列
消息队列:传送有格式的消息流
多进程网状交叉通信、实现大规模的数据通信
使用内核中的链表
消息队列是随内核持续的
线程
什么是线程
线程是进程的一个实体,它是程序运行的最小单位。同一进程下的线程可以通过全局变量通信
为什么要学习线程:
1、线程是进程的一个实体,它是程序运行的最小单位,它比进程要消耗更少的资源
2、能共享地址空间(进程)(堆栈)
线程由哪些组成
1、指令指针(指向当前被指向的命令)
2、一个栈(函数栈)
3、寄存器的集合(状态寄存器:一部分正在运行中的处理器的状态)
4、一个私有的数据区
线程的特点:
1、线程切换的开销很低
2、线程的通信机制简单
线程并不是操作系统中内核所提供的而是由线程库来提供libpthread.a/.so,离不开OS的支持
int pthread_create(pthread_t *restrict tidp,const pthread_attr_t attr,void(start_rtn)(void),void *restrict arg);
pthread_t *thread:指向线程的指针
const pthread_attr_t attr:创建线程时的属性:NULL无属性创建
void(start_rtn)(void):线程运行的实体函数指针
void *restrict arg):运行函数的参数
注意:线程是进程的一个实体,一旦主进程结束,线程就会被回收
子线程与主线程是相互竞争的关系
pthread_join
int pthread_join(pthread_t thread, void **retval);
需要等待的进程 返回状态
创建两个次线程,两个次线程分别的向同一个文件中写“hello world\n”和“hhhhwwww\n”
线程退出:
被动退出:int pthread_cancel(pthread_t thread)
(1)功能:每次线程是死循环时,可以调动这个函数主动取消该线程
(2)返回值:失败返回非零错误号
(3)参数:thread:要取消线程的TID