Linux下的进程间通信:共享存储
相比于锁的 API,消费者程序会相对复杂一点儿。特别的,消费者程序首先检查文件是否被排斥性的被锁,然后才尝试去获得一个共享锁。相关的代码为:
在 假如当前文件没有被锁,那么消费者将尝试获取一个共享(read-only)锁( 下面的
在本次的代码示例中,通过 IPC 传输的数据是文本:它们来自莎士比亚的戏剧《理查三世》中的两行台词。然而,共享文件的内容还可以是纷繁复杂的,任意的字节数据(例如一个电影)都可以,这使得文件共享变成了一个非常灵活的 IPC 机制。但它的缺点是文件获取速度较慢,因为文件的获取涉及到读或者写。同往常一样,编程总是伴随着折中。下面的例子将通过共享内存来做 IPC,而不是通过共享文件,在性能上相应的有极大的提升。 共享内存对于共享内存,Linux 系统提供了两类不同的 API:传统的 System V API 和更新一点的 POSIX API。在单个应用中,这些 API 不能混用。但是,POSIX 方式的一个坏处是它的特性仍在发展中,并且依赖于安装的内核版本,这非常影响代码的可移植性。例如,默认情况下,POSIX API 用内存映射文件来实现共享内存:对于一个共享的内存段,系统为相应的内容维护一个备份文件。在 POSIX 规范下共享内存可以被配置为不需要备份文件,但这可能会影响可移植性。我的例子中使用的是带有备份文件的 POSIX API,这既结合了内存获取的速度优势,又获得了文件存储的持久性。 下面的共享内存例子中包含两个程序,分别名为
在每个源程序的最上方注释部分都解释了在编译它们时需要添加的链接参数。 (编辑:济南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在Github上创建一个拉取请求
- 英特尔与微软密切联合,处理器专门针对Windows 11进行优化
- 如何用九条命令在一分钟内检查Linux服务器性能?
- windows server 2008 R2/windows 7管理十三 WSUS攻略之一
- 由于错误0x800706ba无法更新Windows 10?
- exchange-2010 – 恢复了2天的Microsoft Exchange – 丢失了
- 5 个 Linux 新手会犯的失误
- Windows是否尝试查找IPv6 AAAA记录,即使它没有可路由的IPv6
- Win7计算机如何保存共享文件
- windows-server-2008 – Windows Server 2008 R2 RDP登录粘