在开发过程,我们经常遇到,处理一个大任务需要for循环上百万千万次,任务简单还好,一下子跑完,任务稍微复杂一点,跑一天几天才能有结果,这时候程序就没啥用处了。
举个简单例子,包工头拉来一车的砖,一个人一只一只的搬,需要一天,若我叫上一百个人,时间就减少一百倍了,叫上两百号人,时间就减少两百倍了。转到代码实现,我把请一个人比作创建一个线程,请十个人就创建十个线程,比如砖上面还有编号(0-9999),一共有10000块砖,请了10个人,那么每人就是1000块,那我创建线程的时候就可以传递参数下去,告诉第一个人,你搬0-999号,告诉第二人,你负责搬1000到1999号,以此类推,十个人任务就分配完。
简单的代码实现如下:
void *Multi_Threads(void * args)
{
int i=0;
int index= *(int*)args;
for(i=index;i<index+(10000/10);i++) // 10000/10 可以用参数传递,这里为了简单就写死
{
//do some thing
}
return NULL;
}
int main()
{
pthread_t pid[10];
int index[10]; //搬砖的起始编号,必须用数组,不能用一个整型,不然创建线程的时候会导致传值错误
int frequency= 10000/10; //每人一千
for(int i=0;i<10;i++)
{
index[i]= fr