在思考了共享内存的整个概念之后,一个问题浮现出来:
两个进程能够共享同一块共享内存吗?两个线程可以共享同一块共享内存吗?
经过更加清晰的思考,我几乎可以确定两个进程可以共享同一块共享内存段,其中第一个是父进程,第二个是使用fork()
创建的子进程,但是两个线程呢?
谢谢。
在思考了共享内存的整个概念之后,一个问题浮现出来:
两个进程能够共享同一块共享内存吗?两个线程可以共享同一块共享内存吗?
经过更加清晰的思考,我几乎可以确定两个进程可以共享同一块共享内存段,其中第一个是父进程,第二个是使用fork()
创建的子进程,但是两个线程呢?
谢谢。
还有特定的内存映射调用可以共享同一个内存段。该调用指定映射是只读还是读写。如何做这取决于操作系统。
两个线程可以共享相同的共享内存吗?
当然可以。通常,多线程进程中的所有内存都由所有线程“共享”,除了一些相对较小的堆栈空间,这些堆栈空间是每个线程独有的。这通常是线程的定义,即它们都在同一个内存空间内运行。
线程还具有额外的复杂性,因为它们在与处理器/核心相关的高速存储器中具有缓存内存段。这个缓存内存是不共享的,并且对内存页面的更新会根据同步操作刷新到中央存储器中。
同一进程中的两个线程也可以同时附加到共享内存段,但考虑到它们已经共享了所在进程的整个地址空间,可能没有太大的意义(尽管有人可能会将其视为一个挑战,提出一个或多个更或多少有效的用例来做到这一点)。