Windows平台C++下DLL静态变量是否在多线程间共享?
结论:DLL中的静态变量X在所有线程间共享
在Windows系统的C++环境下,你的场景里静态变量X确实是所有线程共享的,原因如下:
- 同一个进程内的所有线程共享进程的地址空间。当主应用程序加载
myDll.dll后,DLL的代码段和数据段(包含静态变量X)会被映射到该进程的内存空间中,进程内的所有线程都能访问这块内存区域。 - C++中,全局/static修饰的变量在进程范围内仅存在一个实例。你观察到所有线程打印的X地址完全相同,这直接证明了所有线程访问的是同一块内存。
需要注意的是:
- 如果是不同进程加载同一个
myDll.dll,每个进程会拥有独立的X副本,但你的场景是同一进程下的多线程,所以不存在这种情况。 - 多线程并发访问共享的静态变量X时,必须添加同步机制(比如临界区
CRITICAL_SECTION、互斥量Mutex等),否则会出现竞态条件,导致数据损坏或逻辑错误。
内容的提问来源于stack exchange,提问作者MrMartins
相关产品推荐
相关产品推荐

