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

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

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

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

老实说,不多。 在Linux上,没有OS级别的线程。 一个进程,一个线程。 所以,当你使用pthreads时,你实际上使用多个进程来共享除了线程特定的存储区域之外的所有内存。 但是,在不同的UNIX上,如OSX,情况可能并非如此。 但是你可以亲自看到你做了一个简单的pthreads进程,并且在shell提示符下键入ps