linux - IPC 的共享内存和线程的共享内存有什么区别?

标签 linux multithreading ipc shared-memory

让我们使用 POSIX 共享内存,如 shmget() - 协调进程间通信的常见调用。在共享内存段上调用 ​​shmget() 和协调通信与 Linux 在单个进程中实现线程间共享内存和同步的方式有何不同。其中一个更轻吗?

最佳答案

SHM 用于多进程中的 IPC。在现代操作系统中,每个进程都看不到彼此的内存空间。使用 shmget() 的公共(public)键获取共享内存,并使用 shmat() 将共享内存页映射到每个进程内的本地内存地址。由于不同的内存使用和加载到每个进程空间的共享库,映射的共享内存地址可能不同。并且 SHM key 、大小在这些过程中是预定义和固定的。

对于线程的内存,我们可能不叫它共享内存,因为线程都是在同一个进程的内存空间寻址。他们可以在同一个进程空间中查看和读/写。

关于linux - IPC 的共享内存和线程的共享内存有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345059/

相关文章:

c - 我自己的消息队列/fifo

java - 在Linux中配置tomcat并运行部署的应用程序

linux - yum update throws Could not create lock at/var/run/yum.pid on centos 6.5 无法在 centos 6.5 上创建锁

linux - 可以在 zsh 中结合 glob 排序和交替吗?

c# - 在指定时间段后停止方法

java - 从Handler迁移到ScheduledExecutorService进行调度

javascript - 让网络 worker 更快、毫不拖延地开始

c - C 中的进程间通信

r - 如何将数据帧从 R 发送到 Q/KDB?

linux - linux中串口PCM语音数据到声音设备的转换