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

时间:2012-11-12 14:00:28

标签: linux multithreading ipc shared-memory

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

老实说,并不多。在Linux上,没有操作系统级别的线程。一个过程,一个线程。因此,当您使用pthread时,实际上您正在使用除了线程特定存储区域之外共享所有内存的多个进程。但是,在不同的UNIX上,例如OSX,情况可能并非如此。但是你可以自己看到这个,你做了一个简单的pthreads过程,给它起了背景,并在shell提示符下输入ps