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

Pin*_*ade 6 linux multithreading ipc shared-memory

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

jcl*_*lin 4

SHM适用于多进程中的IPC。在现代操作系统中,每个进程无法看到彼此的内存空间。使用公共密钥来shmget()获取共享内存并使用shmat()将共享内存页面映射到每个进程内的本地内存地址。由于内存使用情况和加载到每个进程空间的共享库不同,映射的共享内存地址可能会有所不同。并且SHM密钥、大小是在这些进程之间预定义和固定的。

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