一个关于线程和进程的小题目

 
一个关于线程和进程的问题,操作系统考试的必出题,有点没理解

 #define GALAXIES_BOUND 10
int worlds, galaxies;
pthread_t demiurge;

void* populateGalaxies(void* param) {
int i;
for(i=0;i printf("%d %d ", worlds, galaxies);
pthread_exit(NULL);
}

void* createUniverse(void* param) {
worlds++;
pthread_create(&demiurge, NULL, populateGalaxies, NULL);
pthread_join(demiurge, NULL);
return NULL;
}
int main(void) {
worlds = 0;
galaxies = 0;

if (fork() == 0) {
createUniverse(NULL);
} else {
wait(NULL);
createUniverse(NULL);
}
return 0;
}

答案给出的运行结果是:1 10 1 10
 
如果答案没错的话,那么相当于这里边,生成的线程没了作用?

想知道:
1.正常情况下,这个 i 是每个线程独自拥有的的变量还是也属于线程共享的变量
2.新线程里是否不包含world++
3.我自己的答案是 1 10 1 20 1 10 1 20(我先假设 i 是每个线程中独立的变量)

因为现在多科紧张复习,想提高点效率,这方面的教材没找着精准的。希望指教

1.别管是否是多线程,i是在函数里定义的,那么必然不共享
2.world++是在主线程里执行的,只有populateGalaxies这个函数是在新线程里执行的
3.createUniverse这个函数只调用了一次,你看它写了两遍,但是是在if的两个分支里的,要么走if,要么走else,不可能都走
所以一共只创建了一个子线程
打印也只应该打印1次
我都没看出来第二次打印是在哪打的
怎么你能算出来打印了4次呢