假设我有一个带有全局变量的库,可以读取和写入操作。
我假设以下内容:
上述假设是否正确?
如果它有意义(尽管我认为它没有),那么我用C ++编写代码并在Windows上运行。
由于
答案 0 :(得分:2)
您最后的假设是错误的,您不能在图书馆之间意外共享数据。
如何实现这一点是针对每种库格式和操作系统的,但主要思路很简单:
int rand() { return 4; }
)"Hello, World!"
)即使在Linux上使用fork
,新创建的进程也不会共享其父进程中的变量;它将在副本中分享它们的初始值,但两者将以不同的方式发展。
话虽如此,只要避免全局变量;如果可能的话,还要避免使用线程局部变量。
答案 1 :(得分:1)
动态链接库在不同进程上不会安全使用。
这是错误的。
即使库在不同进程之间共享,也会考虑代码。但每个进程都将数据映射到其内存空间。因此,每个进程都有独立的全局变量,即使它们来自共享库。
更确切地说,here已经详细解释了它。
要让不同的进程共享一些内存,您需要使用特定的库,如shmget()
或shm_open()