linux进程间同步和共享内存

进程之间上锁:文件记录锁(用于同步进程对文件的访问,这个锁可以设置为阻塞的,进而也可以用作进程间同步手段),进程间通信的信号量,线程间通信的互斥锁变量放在所有进程的共享内存区,设置属性为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,结果得到的区域是匿名的(因为他并不通过一个文件描述符与一个路径名相结合),而且创建一个可以与后代进程共享的存储区。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值