进程之间上锁:文件记录锁(用于同步进程对文件的访问,这个锁可以设置为阻塞的,进而也可以用作进程间同步手段),进程间通信的信号量,线程间通信的互斥锁变量放在所有进程的共享内存区,设置属性为shared。线程的互斥锁变量时间最快,然后是信号量,文件记录锁最慢。虽然记录锁要比信号量锁慢,但如果只需要锁一个资源(例如共享存储段)并且不需要信号量锁的花哨功能,则宁可使用记录锁。因为简单,且进程终止时系统会处理任何遗留下来的问题。
不同进程间共享内存:mmap以及/dev/zero设备。共享存储。
共享存储可以由不相关的进程使用。但如果是相关的,则mmap和/dev/zero也可以实现共享内存。
在读设备/dev/zero时,该设备是0字节的无线资源。他也接受写向他的任何数据,但又忽略这些数据。当对其进行存储映射时,它具有一些特殊的性质:
创建一个未名的存储区,其长度是mmap的第二个参数,将其向上取整为系统的最近页长。
存储区初始化为0,
如果多个进程的共同祖先进程对mmap指定了MAP_shared标识,则这些进程可以共享此存储区
MAP_shared标识是说存储操作相当于对该文件的write。存储操作修改对应文件。
MAP_PRIVATE标识说明对映射区的存储操作将导致创建该映射文件的一个私有副本。所有后来对该映射区的引用都是引用该副本,而不是原始文件。不会改变原始文件。
在UNIX网络编程中,通过这个/dev/zero设备映射为存储区,并设置了MAP_shared,进而可以在子进程间共享。
先打开/dev/zero设备,获取一个文件描述符,然后进行文件映射,
匿名存储映射
在调用mmap时,指定MAP_ANON标识,并将文件描述符指定为-1,结果得到的区域是匿名的(因为他并不通过一个文件描述符与一个路径名相结合),而且创建一个可以与后代进程共享的存储区。