进程/线程通信
文章平均质量分 79
骑猪去兜风..
无
展开
-
posix消息队列
posix和System V历史 UNIX两大贡献者贝尔实验室和BSD,在进程之间通信侧重不同,前者基于内核对进程之间的通信手段进行了改进,形成了“System V IPC”,而后者则是基于网络形成了套接字。 而POSIX则是IEEE制定的标准,目的是为运行在不同操作系统上的软件提供统一的接口,实现者则是不同的操作系统内核开发人员。说明 在信...原创 2018-06-01 16:51:57 · 357 阅读 · 0 评论 -
System V信号量
信号量集数据结构 struct semid_ds { struct ipc_perm sem_perm; //IPC对象数据结构 time_t sem_otime; //最后一次执行semop(PV操作)的时间 time_t sem_ctime; //信号量集状态最后一次改变的时间 unsigned short sem_nsem...原创 2018-05-31 18:13:10 · 287 阅读 · 0 评论 -
System V信号量实现进程互斥和解决哲学家就餐问题
父进程打印输出一个o的字样,子进程打印输出x的字样,父进程打印输出o之后睡眠,睡眠一个随机的时间,然后再次输出o,子进程也是同样的动作,只是输出的是x。实现代码#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#includ...原创 2018-05-31 17:22:01 · 516 阅读 · 0 评论 -
System V共享内存区
共享内存数据结构 struct shmid_ds { struct ipc_perm shm_perm; //IPC对象数据结构 size_t shm_segsz; //共享内存段的大小 time_t shm_atime; //最后一次映射共享内存的时间 time_t shm_d...原创 2018-05-31 19:06:18 · 274 阅读 · 2 评论 -
管道和FIFO
1.管道的概念本质: 内核缓冲区 伪文件 - 不占用磁盘空间特点:两部分:读端,写端,对应两个文件描述符 数据写端流入, 读端流出 操作管道的进程被销毁之后,管道自动被释放了 管道默认是阻塞的,读写两端都是2.管道的原理内部实现方式:环形队列特点:先进先出缓冲区大小:默认4k,根据命令ulimit -p查看大小会根据实际情况做适当调整3. 管道的局...原创 2018-06-06 15:57:06 · 514 阅读 · 0 评论 -
共享内存
共享内存共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据,只需要通过一些内存访问函数来传递。共享内存示意图共享内存是整块内存当中的一块特殊区域,这块区域可以映射到不同的地址空间。A、B进程就可以通过共享内存区传递数据,并且不涉及系统调用。管道、消息队列与共享内...原创 2018-05-31 19:03:42 · 428 阅读 · 0 评论 -
互斥锁、条件变量、读写锁、信号量、自旋锁、递归锁
互斥锁互斥锁指代相互排斥,它是最基本的同步方式。互斥锁用于保护临界区,以保证任何时刻只有一个线程在执行其中的代码(假设互斥锁由多个线程共享),或者任何时刻只有一个进程在执行其中的代码。多线程中如果忘记释放锁,可以在异常处理函数中进行释放。1. 互斥锁类型:创建一把锁:pthread_mutex_t mutex;2. 互斥锁的特点:多个线程访问共享数据的时候是串行的3...原创 2018-06-06 10:33:21 · 1274 阅读 · 1 评论 -
System V消息队列实现回射客户/服务器
撒大大队列达到复用的目的类型区分: 服务器用1标识类型,客户端用自己的进程标识类型。对于服务器端来说,接收到一个消息结构体的类型如果为1,表示是客户请求,而mtex 字段的前4个字节存放着不同进程的pid ,后续字节才是真正的数据,服务器回射客户端时,将pid 作为类型,mtex 为实际数据,客户端只接收对应类型的数据,故可以区分不同客户端。双向通信,既可以客户端到服务器端发送消息,也可以用于服务...原创 2018-05-30 10:05:01 · 359 阅读 · 2 评论 -
System V消息队列
消息队列Linux中的消息队列是进程间通信的一种方式,通过创建一个消息队列可以完成一个或者多个进程的信息交汇。因此,首先我们要了解消息队列是什么。消息队列的本质其实是一个内核提供的链表,内核基于这个链表,实现了一个数据结构,并且通过维护这个数据结构来维护这个消息队列。向消息队列中写数据,实际上是向这个数据结构中插入一个新结点;从消息队列汇总读数据,实际上是从这个数据结构中删除一个结点。1....原创 2018-05-29 21:34:56 · 525 阅读 · 0 评论 -
进程间通信介绍
进程同步与进程互斥1.顺序程序特征 顺序性 封闭性(指运行环境的封闭性) 确定性 可再现性2.并发程序特征 共享性 并发性 随机性3.进程互斥由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源在进程中涉及到互斥资源的程序段叫临界区4...原创 2018-05-29 19:23:33 · 238 阅读 · 0 评论 -
POSIX共享内存
阅读之前请先参考先前的一篇关于共享内存的详细介绍点击打开链接shm_open 函数功能:用来创建或打开一个共享内存对象原型:int shm_open(const char* name,int oflag,mode_t mode);参数: name:共享内存对象的名字 oflag:与open 函数类似,可以是O_RDONLY,O_RDWR,还可以按位或上O_CREAT,O_EXCL,O_...原创 2018-06-01 20:19:33 · 369 阅读 · 0 评论