C++ 在不同线程中访问对象

C++ 在不同线程中访问对象,c++,multithreading,C++,Multithreading,这里有两个班级: class TestClass { public: TestClass(); map<int,int> int_map; }; TestClass::TestClass() { printf("TestClass1 addr(%p) \n",this); } TestClass2::TestClass2(TestClass* tc){ tc1 = tc; printf("TestClass2 ge

这里有两个班级:

class TestClass
{
    public:
        TestClass();
        map<int,int> int_map;
};


TestClass::TestClass()
{

    printf("TestClass1 addr(%p) \n",this);
}
TestClass2::TestClass2(TestClass* tc){
    tc1 = tc;
    printf("TestClass2 get TestClass1 ,addr(%p) !\n",tc1);
}





class TestClass2
{
    public:
        TestClass2(TestClass* tc);
        void Run();
        TestClass* tc1;
};


void TestClass2::Run(){
        int i = 0;
        while(true){
        tc1->int_map.insert(make_pair(i,1));
        printf("TestClass2:size of TestClass1(%p) int_map is %d!\n",tc1,tc1->int_map.size());
        sleep(2);
        i++;
    }
}
TestClass中的int_映射在不同线程中打印时的大小应该相同

tc2->Run()打印出正确的值,
但是我在子线程中得到了0,尽管tc1在两个线程中指向相同的地址。

您不使用线程,而是创建了一个新进程!但是当访问同一地址的对象时,结果可能会不同?“fork()通过复制调用进程来创建一个新进程。”和“子进程和父进程在不同的内存空间中运行。在fork()时,两个内存空间具有相同的内容。内存写入、文件映射(mmap(2))和取消映射(munmap(2))由其中一个进程执行,不会影响另一个进程。
int main()
{
    TestClass* tc1 = new TestClass();
    printf("tc1 addr is %p!\n",tc1);
    TestClass2* tc2 = new TestClass2(tc1);
    pid_t pid = fork();
    if(pid == 0){
        while(1){
            sleep(1);
            printf("TestClass1 :%p int_map size %d!\n",tc1,tc1->int_map.size());
        }
    }else{
        tc2->Run();
    }

}