无锡中英文网站建设,邢台瑞光网络科技有限公司,nas做网站需要备案吗,寺院网站建设方案进程和线程进程#xff1a;一个正在运行的程序。状态#xff1a;就绪#xff0c;运行#xff0c;阻塞#xff1b;线程是进程中的一个执行路径#xff0c;一个进程中至少有一个主线程#xff08;main函数#xff09;#xff1b;有多条执行路径为多线程。创建一个线程用…进程和线程进程一个正在运行的程序。状态就绪运行阻塞线程是进程中的一个执行路径一个进程中至少有一个主线程main函数有多条执行路径为多线程。创建一个线程用pthread_create()创建记得编译的时候后面加-pthread多个线程用同一个进程的地址空间#includestdio.h
#includestdlib.h
#includeunistd.h
#includestring.h
#includepthread.h
void *fun(void *arg)//这是一个线程
{for(int i0;i5;i){printf(“fun run\n”);sleep(1);
}
pthread_exit(“fun over”);//可以返回线程信息给主线程
}
int main()
{pthread_t id;
//create执行一次创建一个进程pthread_create(id,NULL,fun,NULL);//创建了一个fun线程for(int i0;i5;i){printf(“main run\n”);sleep(1);
}
char *s NULL;pthread_join(id,(void**)s);
//等待线程返回的信息如果子线程没有运行完主线程会被阻塞可以防止fun线程没有运行完main就结束。
printf(“s%s\n”,s);//不能用临时变量
exit(0);
}
两个路径同时进行主函数主进程退出其余进程也会结束尽量让主函数慢点退出sleep一下。当然用了pthread_join();接收返回信息阻塞可以不用sleep了解程序的并发运行并行是特殊的并发我的虚拟机有4个处理器所以准确来说这几个线程应该是并行的。同时创建多个线程并打印自己是第几个线程#includestdio.h
#includestdlib.h
#includeunistd.h
#includestring.h
#includepthread.h
void *fun(void *arg)//这是一个线程
{int index *(int*)arg;printf(“index%d\n”,index);
sleep(1);printf(“index%d\n”,index);
pthread_exit(NULL);//可以返回线程信息给主线程
}
int main()
{pthread_t id[5];
//create执行一次创建一个进程
int i0;for(i0;i5;i)
{pthread_create(id[i],NULL,fun,(void*)i);//创建线程传地址
}
for(i0;i5;i)
{pthread_join(id[i],NULL);
}exit(0);
}运行结果程序运行有不确定性少用多线程因为线程获取i是靠i的地址可能第一次循环的时候这些线程还没来得及获取i的值到第二个for循环i被置0时才取得i的值所以线程输出全是0。获取i的值的速度差不多同时获取值出现几个相同的写入缓冲区的速度不一样不一定从0到4。#includestdio.h
#includestdlib.h
#includeunistd.h
#includestring.h
#includepthread.h
int g_count 1;
void *fun(void *arg)//这是一个线程
{for(int i0;i1000;i){printf(“g_count%d\n”,g_count);}
pthread_exit(NULL);//可以返回线程信息给主线程
}
int main()
{pthread_t id[5];
//create执行一次创建一个进程for(int i0;i5;i)
{pthread_create(id[i],NULL,fun,NULL);//创建线程传地址
}
for(int i0;i5;i)
{pthread_join(id[i],NULL);
}exit(0);
}
理想的结果应该是5000每个线程加1000次但是结果会出现49994998等这是因为两个进程同时执行了然后把数值存回去本来应加两次变成了加一次导致结果变小了。