32、高级进程间通信:System V共享内存详解

高级进程间通信:System V共享内存详解

1. 高性能数据库锁定

文件锁(通过 fcntl lockf 系统调用实现),即使有强制锁定机制,也不适合高性能数据库。原因在于操作锁的开销太大,并且难以实现复杂的死锁检测和纠正算法。不过通常情况下,大型数据库系统会在自己的进程中运行,充当数据库文件的守门人。锁可以轻松地保存在数据库进程的地址空间或多个数据库进程共享的内存中,这样就无需使用系统调用来管理锁。

2. 共享内存概述

进程内的线程会共享所有静态数据,包括全局数据和函数内部的静态数据。而进程则拥有完全独立的内存,即便执行 fork 操作而不执行 exec ,子进程也会获得父进程地址空间的副本。

使用共享内存可以让不同的进程共享部分内存。和线程一样,进程通常需要使用互斥锁或信号量来协调对共享内存的访问。共享内存有System V和POSIX两种版本,消息和信号量也是如此。对于这两种机制,每个进程都会“打开”一个共享内存段并获取指向该内存的指针,之后就可以使用普通的C或C++运算符来操作该内存,无需使用系统调用。通常,每个进程的指针值不同,仅在该进程内部有意义,但底层的内存是相同的。下面先介绍System V共享内存。

3. System V共享内存
3.1 System V共享内存系统调用

System V共享内存涉及以下几个系统调用:
- shmget :用于获取共享内存段。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值