4

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

4

2 回答 2

3

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

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

于 2012-11-12T14:17:23.053 回答
2

老实说,不多。在 Linux 上,没有操作系统级别的线程。一个进程,一个线程。因此,当您使用 pthreads 时,您实际上是在使用多个进程,这些进程共享除线程特定存储区域之外的所有内存。但是,在不同的 UNIX(例如 OSX)上,情况可能并非如此。但是您可以自己看到这一点,您创建了一个简单的 pthreads 进程,将其设置为后台,然后ps在 shell 提示符下键入。

于 2012-11-12T14:14:52.393 回答