假设我有一个带有全局变量的库,可以通过读取和写入操作访问该变量。
我假设如下:
- 静态链接库在不同线程上并发使用时不安全。
- 静态链接库可以在不同进程上同时安全使用。
- 动态链接库无法在不同线程上同时安全使用。
- 动态链接库无法在不同进程上同时安全使用。
以上假设正确吗?
如果有什么重要的话(尽管我认为并不重要),那么我将使用 C++ 进行编码并在 Windows 上运行。
谢谢
最佳答案
您的最后一个假设是错误的,您不可能意外地在库之间共享数据。
这是如何实现的,具体取决于每个库格式和操作系统,但主要思想很简单:
- 代码是只读:可以安全地共享(例如
int rand() { return 4; }
) - 常量是只读:它们可以安全地共享(想想
“Hello,World!”
) - 变量不是只读的:它们不是共享的(共享不可变的"template",并用于初始化进程自己的私有(private)拷贝)
即使在Linux上使用fork
,新创建的进程也不会共享其父进程的变量;它将在拷贝中共享它们的初始值,但两者都会以不同的方式发展。
话虽如此,只要避免全局变量即可;如果可能的话,也避免线程局部变量。
关于c++ - 在库中使用全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22270237/