访问不同线程中的对象

时间:2017-07-26 15:10:13

标签: 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 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++;
    }
}

和主要乐趣

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();
    }

}

在不同的线程中打印时,TestClass中int_map的大小应该相同。

tc2-&gt; Run()打印出正确的值, 但我在子线程中得到0虽然tc1指向两个线程中的相同地址。

0 个答案:

没有答案