linux之IPC
文章平均质量分 88
带鱼兄
爱在新空气,快乐每一天
展开
-
linux多线程之条件变量
基本概念:条件变量是线程可用的另一种同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定条件发生。条件变量本身是互斥量保护的。线程在改变条件状态之前必须首先锁住互斥量。在使用条件变量之前,必须先对它进行初始化。由pthread_cond_t数据类型表示的条件变量可以用两种方式初始化,可以把常量PTHREAD_COND_INITIA原创 2016-08-13 23:23:41 · 1101 阅读 · 0 评论 -
linux多线程之读写锁
基本概念:读写锁也叫做共享互斥锁。当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞。当读写锁在读加锁状态,所有试图以读模式对它进行加锁的线程都可以得到访问权。与互斥量相比,读写锁在使用之前必须初始化,在释放它们底层的内存之前必须销毁。一、锁的初始化与销毁PTHREAD_RWLOCK_DESTROY(P) POSIX Programmer原创 2016-08-13 21:33:15 · 2561 阅读 · 2 评论 -
linux多线程之互斥锁
基本概念:互斥变量是用pthread_mutex_t数据类型表示的。在使用互斥变量以前,必须首先对它进行初始化,可以把它设置为常量PTHREAD_MUTEX_INITIALIZER(只适用于静态分配的互斥量),也可以通过调用pthread_mutex_init函数进行初始化。如果动态分配互斥量(例如,通过调用malloc函数),在释放内存前需要调用pthread_mutex_destroy。原创 2016-08-13 18:24:49 · 1455 阅读 · 0 评论 -
IPC之Posix内存映射文件详解
1.什么是内存映射文件 内存映射文件,就是把磁盘上的物理文件映射至进程地址空间中,使用内存映射文件的特性是,所有的I/O都是在内核掩盖下完成,我们只需编写存取内存映射区中各个值的代码,也就是不需要调用read/write/lseek。 如图示: 2.内存映射文件与read文件时物理内存占用区别 需要了解物理内存和进程空间地址的映射关系。 可以通过 top -p...原创 2016-01-10 20:44:25 · 1805 阅读 · 0 评论 -
IPC(进程间通信)概述
基本概念:大多数重要的程序都涉及进程间通信(Interprocess Communication,IPC)。这是受下述设计原则影响的自然结果:把应用程序设计为一组互相通信的小片段比将其设计为单个庞大的程序更好。ICP主要有四种形式:(1)消息传递(管道、FIFO和消息队列);(2)同步(互斥量、条件变量、读写锁、文件和记录锁、信号量);(3)共享内存(匿名的和具名的);原创 2016-09-02 23:24:38 · 1126 阅读 · 0 评论 -
IPC之Posix共享内存详解
1.概念 共享内存区,按标准可分为Posix共享内存区和System V共享内存区,两者在概念上类似。 Posix 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称原创 2016-01-12 00:22:53 · 8202 阅读 · 1 评论 -
IPC之FIFO(有名管道)详解
基本概念:管道没有名字,因此它们的最大劣势是只能用于有一个共同祖先进程的各个进程之间。我们无法在无亲缘关系的进程间创建一个管道并将它用作IPC管道(不考虑描述符传递)。FIFO指先进先出(first in,first out),它是一个单向(半双工)数据流。不同于管道的是,每个FIFO有一个路径名与之关联,从而允许无亲缘关系的进程访问同一个FIFO。FIFO也称为有名管道(named pi原创 2016-08-21 00:45:36 · 4390 阅读 · 2 评论 -
IPC之管道详解
基本概念:linux管道由pipe函数创建,提供一个单路(单向)数据流。(注:linux不支持全双工的管道,某些系统支持)PIPE(2) Linux Programmer's Manual PIP原创 2016-08-19 00:12:43 · 3436 阅读 · 0 评论 -
IPC之Posix信号量详解
基本概念:信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不用线程间同步手段的原语。共有三种类型的信号量:1)Posix有名信号量:使用Posix IPC名字标识,可用于进程或线程间的同步。2)Posix基于内存的信号量:存放在共享内存区中,可用于进程或线程间的同步。3)System V信号量:在内核中维护,可用于进程或者线程间同步。(本文不讨论System原创 2016-08-28 22:14:05 · 4651 阅读 · 2 评论 -
IPC之记录锁详解
基本概念:当两个人同时编辑一个文件时,其后果将如何?在大多数unix系统中,该文件的最后状态取决于写该文件的最后一个进程,记录锁(record locking)的功能是:当一个进程正在读或者修改文件的某个部分时,使用记录锁可以阻止其他进程修改同一区域。POSIX.1标准是使用fcntl方法控制记录锁,函数原型如下FCNTL(2) Linu原创 2016-08-17 01:10:22 · 1705 阅读 · 0 评论 -
IPC之Posix消息队列详解
基本概念: 消息队列可认为是一个消息链表。有足够写权限的线程可往队列中放置消息,有足够读权限的线程可从队列中取走消息,每个消息都是一个记录(非字节流式,也就是不需要自定义边界),它由发送者赋予一个优先级。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。 一个进程可以往某个队列写入一些消息,然后终止,再让另外一个进程在以后某个时刻读出这些消息。消息原创 2016-08-27 20:49:19 · 2970 阅读 · 0 评论 -
IPC之管道和FIFO的额外属性
前文:IPC之管道详解IPC之FIFO(有名管道)详解关于阻塞与非阻塞:首先,一个描述符能以两种方式设置成非阻塞。(1)调用open时可指定O_NONBLOCK标志。(2)如果一个描述符已经打开,那么可以调用fcntl以启用O_NONBLOCK标志。因为管道没有open调用,在pipe调用中没法指定O_NONBLOCK标志,所以管道必须使用fcntl函数来设置。原创 2016-08-21 22:21:29 · 1154 阅读 · 0 评论