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