
进程间通信
文章平均质量分 75
lp525110627
这个作者很懒,什么都没留下…
展开
-
Posix共享内存区
Posix提供了两种在无亲缘关系进程间共享内存区的方法:(1)内存映射文件:先有open函数打开,然后调用mmap函数把得到的描述符映射到当前进程地址空间中的一个文件(上一篇笔记所用到的就是)。(2)共享内存区对象:先有shm_open打开一个Posix IPC名字(也可以是文件系统中的一个路径名),然后调用mmap将返回的描述符映射到当前进程的地址空间。者两种方法多需要调原创 2016-11-27 14:25:11 · 394 阅读 · 0 评论 -
System V共享内存
System V 与Posix 共享内存区二者的差别是:(1)Posix共享内存区是先调用shm_open然后再调用mmap,System V 共享内存区是先调用shmget再调用shmat。(2)Posix共享内存区对象的大小可在任何时刻通过ftruncate修改,而System V 共享内存区对象的大小是在调用shmget创建时固定下来的。1、int shmge原创 2016-11-27 14:26:40 · 393 阅读 · 0 评论 -
管道和FIFO
1、概述管道:是最初的Unix IPC形式,但是没有名字只能有亲缘关系的进程使用。FIFO有时称为有名管道,可以在任意进程间使用。2、管道#includeint pipe(int fd[2]);返回值:成功,返回0,否则返回-1。参数数组包含pipe使用的两个文件的描述符。fd[0]:读管道,fd[1]:写管道。宏S_ISFIFO用于确定一个文原创 2016-11-27 14:18:57 · 385 阅读 · 0 评论 -
消息队列
一、Posix消息队列1、mq_open,mq_close,mq_unlink #include mqueue.h>mqd_t mq_open(const char *name, int oflag, ...);oflag:O_RDONLY,O_WRONLY,O_RDWR,O_CREAT,O_EXCL,O_NONBLOCKmq_open的返回值为消息队列原创 2016-11-27 14:20:51 · 1170 阅读 · 0 评论 -
进程间通信方式对比
UNIX 为实现这样的进程间通信 提供了多种技术。一些技术提供同一主机上的进程间通信,其他技术可以实现主机到主机的信息交换。另外,各种技术的速度不同,所以必须选择最合适自己需求的技术。还必须进行协调(实施时间控制和排他控制)。例如,如果一个应用程序产生数据,另一个应用程序消费数据,那么当读完共享池时消费者必须停下来等待生产者。另一方面,如果消费者无法足够快地读取池,生产者必须慢下来或暂停。转载 2017-09-22 10:31:25 · 1234 阅读 · 0 评论 -
共享内存
共享内存是IPC最快的方式。一旦这种方式映射到共享它的进程地址空间,这些进程间的数据传递就不在涉及内核。管道、FIFO、System V消息队列的read、msgrcv、write和msgsnd都涉及从进程与内核的数据复制。共享内存操作函数:1、系统调用mmap() void* mmap ( void * addr , size_t len , int prot , int flags , ...原创 2016-11-27 14:22:11 · 323 阅读 · 0 评论 -
互斥锁和条件变量
1、互斥锁互斥锁APIpthread_mutex_lock(pthread_mutex_t *mutex); 用此函数加锁时,如果mutex已经被锁住,当前尝试加锁的线程就会阻塞,直到互斥锁被其他线程释放。当此函数返回时,说明互斥锁已经被当前线程成功加锁.pthread_mutex_trylock(pthread_mutex_t *mutex); 用此函数加锁时,如果mutex已经卑琐主,当前尝试...原创 2016-11-27 14:23:02 · 476 阅读 · 0 评论