本文主要验证动态库的全局变量和动态变量影响环境,经测试验证。动态库,代码共享,数据分离,不管是什么数据。
Compute.h:代码如下:
#ifndef __COMPUTE_H
#define __COMPUTE_H
int GetResult();
int GetStaticResult();
#endif
Compute.cpp:代码如下:
#include "Compute.h"
static int gn_test = 1;
int GetResult(){
++gn_test;
return gn_test;
}
int GetStaticResult(){
static int s_nTest = 1;
++s_nTest;
return s_nTest;
}
main.cpp代码如下:
#include "Compute.h"
#include <iostream>
#include <thread>
#include <chrono>
void ShowValue(){
while(true){
std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << "Value:" << GetResult() << std::endl;
std::cout << "Static value:" << GetStaticResult() << std::endl;
}
}
int main(int argc, char**argv){
std::thread tTask(ShowValue);
tTask.join();
return 0;
}
编译选项如下:
1、先生成动态库:
g++ -fPIC -shared -o libCompute.so Compute.cpp
2、生成执行文件,并链接动态库
g++ main.cpp -lpthread -L . -lCompute -o test
3、拷贝文件到搜索目录
$ sudo cp libCompute.so /usr/lib/
4、在2个终端运行,结果互不影响:



本文通过实验验证了在C++中动态库的全局变量和静态变量如何影响多线程环境。通过编译和运行两个独立的终端程序,展示了即使在共享库环境下,每个进程的变量状态仍保持独立。
2522

被折叠的 条评论
为什么被折叠?



