在库中使用全局变量

巴拉克的手

假设我有一个带有全局变量的库,可以通过读取和写入操作来访问它。

我假设以下内容:

  • 静态链接库不能安全地在不同线程上同时使用。
  • 静态链接的库可以安全地在不同的进程上同时使用。
  • 动态链接的库不能安全地在不同线程上同时使用。
  • 动态链接的库不能安全地在不同的进程上同时使用。

以上假设是否正确?

如果有什么关系(尽管我认为没有关系),那么我正在用C ++编写代码并在Windows上运行。

谢谢

马修M.

您的最后一个假设是错误的,您不能意外地在库之间共享数据。

具体实现方式是针对每种库格式和操作系统的,但主要思想很简单:

  • 代码是只读的:可以安全共享(请考虑int rand() { return 4; }
  • 常量是只读的:可以安全地共享它们(请考虑"Hello, World!"
  • 变量不是只读的:不共享(共享一个不可变的“模板”,并用于初始化进程自己的私有副本)

即使fork在Linux上使用时,新创建的进程也不会共享其父进程的变量。它将在副本中共享其初始值,但随后两者将有所不同。

话虽这么说,但要避免使用全局变量;并尽可能避免使用线程局部变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章