这里有两节课:
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指向两个线程中的相同地址。