是共享库/dll中的全局变量,跨进程共享

是共享库/dll中的全局变量,跨进程共享,dll,shared-libraries,Dll,Shared Libraries,我正在开发一个共享库(.so)和dll。我有一个全局变量,它在多个线程中更新。所以我有用于同步的互斥锁 我不清楚共享库中的全局数据是否在整个过程中共享。如果是,那么我需要使用信号量进行同步。由于我了解全局变量是数据段的一部分,所以我想了解dll如何跨进程管理全局数据。任何关于w.r.t.dll格式和段的信息都会有帮助 谢谢。默认情况下,不会,全局变量不会在进程之间共享 但是,您可以使用数据段(data_seg)在进程之间共享全局变量。您可以在标题为“绝对否”的文章中找到有关MSDN的更多信息。每

我正在开发一个共享库(.so)和dll。我有一个全局变量,它在多个线程中更新。所以我有用于同步的互斥锁

我不清楚共享库中的全局数据是否在整个过程中共享。如果是,那么我需要使用信号量进行同步。由于我了解全局变量是数据段的一部分,所以我想了解dll如何跨进程管理全局数据。任何关于w.r.t.dll格式和段的信息都会有帮助


谢谢。

默认情况下,不会,全局变量不会在进程之间共享


但是,您可以使用数据段(data_seg)在进程之间共享全局变量。您可以在标题为“

绝对否”的文章中找到有关MSDN的更多信息。每个进程都有自己的虚拟内存空间,看不到其他进程的内存。两个进程甚至可以在同一地址存储不同的值,比如1000000,因为它们的虚拟地址“1000000”映射到不同的物理内存单元(例如,第一个进程映射到“2000000”,第二个进程映射到“3000000”)。
共享dll不会改变这方面的任何内容。

抱歉,这根本不是真的。请尝试阅读一些内容,例如从以下内容开始:关于内存管理/虚拟内存映射以及在win32平台上管理不同进程中的内存,然后再在此处写入任何内容:)讽刺的是,您如何说“尝试读取内容”,事实上,我在MSDN上贴了一个链接,显示了到底做了什么,以及为什么你的答案是错的。我只是看不出什么是错的。dll全局变量是否跨多个进程共享?不。我们可以从您的链接中看到:“Win32 DLL映射到调用进程的地址空间。默认情况下,使用DLL的每个进程都有自己的所有DLL全局和静态变量实例。”我回答了什么?“没有。”怎么了?我想你误解了这个问题。的确,每个进程都有自己的虚拟内存空间。但问题是“应用程序能否更改库中声明的全局变量?”。那个么,进程是否与dll共享其名称空间?没那么简单。@CasperOne:默认情况下,共享库数据段会在每个进程中复制吗?@Andy:我不知道你说的复制是什么意思。基本上,如果您链接到同一个dll(如果这是您所要求的),您将能够跨进程共享这些值。否则,您能详细说明一下吗?@CasperOne:我认为dll的代码(文本)段是跨进程共享的。所以我想知道dll的数据段发生了什么。是否将dll中数据段的内容复制到流程数据段中。以及动态加载dll时这是如何发生的。有关dll如何真正工作的相关问题有很好的解释: