高级进程间通信:系统V共享内存深入解析
1. 高级进程间通信概述
在具有强制锁定的Solaris系统上运行特定程序时,会出现不同的结果。例如运行 lockftest 和 lockftest x 命令:
$ lockftest
parent has lock
child wrote OK
$ lockftest x
parent has lock
ERROR: 0: main [/aup/c7/lockftest.c:11] write(fd, "x", 1)
*** EAGAIN (11: "Resource temporarily unavailable") ***
$
若没有 O_NONBLOCK 标志,子进程的写入操作会阻塞,直到锁被释放。同时,对于高性能数据库, fcntl 和 lockf 系统调用提供的文件锁定并不适用,因为操作锁的开销过大,且难以实现复杂的死锁检测和纠正算法。不过,大型数据库系统通常在自己的进程中运行,可将锁保存在数据库进程的地址空间或多个数据库进程共享的内存中,无需使用系统调用管理锁。
2. 共享内存简介
进程内的线程共享所有静态数据,包括全局数据和函数内部的静态数据。而进程拥有独立的内存,即使执行 fork 而不执行 exec ,子进程也会获得父进程地址空间的副本。通过共享内存,不
超级会员免费看
订阅专栏 解锁全文
1129

被折叠的 条评论
为什么被折叠?



