在库中使用全局变量
Using global variables in a library
本文关键字:全局变量 更新时间:2023-10-16
假设我有一个带有全局变量的库,该库可以访问读写和写作操作。
我假设以下内容:
- 静态链接的库将不会在不同的线程上同时使用。
- 静态链接的库将是在不同的过程上同时使用。
- 动态链接的库将不同时使用不同的线程。
- 动态链接的库将在不同的过程中同时使用。
上面的假设正确吗?
如果任何事情都很重要(尽管我想这不是),那么我正在用C 编码并在Windows上运行。
谢谢
您的最后一个假设是错误的,您不能在库之间意外共享数据。
如何实现这是针对每个库格式和操作系统的特定特定的,但是主要思想很简单:
- 代码是只读:可以安全共享(想想
int rand() { return 4; }
) - 常数是读取:它们可以安全共享(想想
"Hello, World!"
) - 变量不是仅读取的:它们没有共享(共享一个不变的"模板",并用于初始化私有过程的副本) )
即使在Linux上使用fork
时,新创建的过程也不会从其父进程共享变量。它将在A copy 中共享其初始价值,但两者都会以不同的方式发展。
话虽如此,只需避免全球变量即可;如果可能的话,还避免了线程 - 本地变量。
动态链接的库将在不同的过程上同时使用。
这是错误的。
即使库在不同的过程之间共享,这也为代码。但是每个过程映射 data 到其内存空间。因此,每个过程都有独立的全局变量,即使它们来自共享库。
更准确地说,在这里得到了很好的细节解释。
让不同的进程共享您需要使用特定库的一些内存,例如shmget()
或shm_open()
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 为什么我的数组值与此处的全局变量不匹配?
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++线程不检测全局变量更改
- 在 elf 文件中查找全局变量的位置
- 包括一个类来定义全局变量参数 c++ :(