gpt4 book ai didi

multithreading - Process VS thread : can two processes share the same shared memory ? 可以两个线程吗?

转载 作者:行者123 更新时间:2023-12-04 00:06:52 27 4
gpt4 key购买 nike

在思考了共享内存的整个概念之后,一个问题出现了:

两个进程可以共享同一个共享内存段吗?两个线程可以共享相同的共享内存吗?

更清楚地考虑之后,我几乎肯定两个进程可以共享相同的共享内存段,其中第一个是父亲,第二个是儿子,这是用 fork() 创建的。 ,但是两个线程呢?

谢谢

最佳答案

can two processes share the same shared memory segment?


是和否。通常在现代操作系统中,当另一个进程是 forked从一开始,它们与 copy-on-write 共享相同的内存空间。在所有页面上设置。对任何读写内存页面所做的任何更新都会导致为该页面创建一个副本,因此将有两个副本,并且该内存页面将不再在父进程和子进程之间共享。这意味着只有只读页面或尚未写入的页面将被共享。
如果一个进程没有从另一个进程 fork ,那么它们通常不共享任何内存。一个异常(exception)是,如果您正在运行同一程序的两个实例,那么它们可能共享 code and maybe even static data segments但不会共享其他页面。
还有 specific memory-map calls共享相同的内存段。该调用指定映射是只读的还是读写的。如何做到这一点非常依赖操作系统。

can two threads share the same shared memory?


当然。通常,多线程进程内的所有内存都由所有线程“共享”,除了一些相对较小的每个线程的堆栈空间。这通常是线程的定义,因为它们都在相同的内存空间中运行。
线程还具有增加的复杂性 cached memory segments在与处理器/内核相关的高速内存中。这个缓存的内存不是共享的,内存页面的更新会根据同步操作刷新到中央存储中。

关于multithreading - Process VS thread : can two processes share the same shared memory ? 可以两个线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566780/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com