【问题标题】:What's the difference between shared memory for IPCs and threads' shared memory?IPC 的共享内存和线程的共享内存有什么区别?
【发布时间】:2012-10-31 22:56:49
【问题描述】:

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

【问题讨论】:

    标签: linux multithreading ipc shared-memory


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2014-10-08
        • 2013-01-08
        • 2012-12-15
        • 2013-10-31
        • 2011-07-23
        • 2015-01-13
        • 2012-12-11
        • 2018-03-27
        相关资源
        最近更新 更多