一个关于线程和进程的问题,操作系统考试的必出题,有点没理解
#define GALAXIES_BOUND 10
int worlds, galaxies;
pthread_t demiurge;
void* populateGalaxies(void* param) {
int i;
for(i=0;i
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次呢