知识点:用Linux下的多线程,对数组中元素分段排序
--------------------------------------------------------------------------------------
参考:
https://blog.csdn.net/skrskr66/article/details/90298470
https://blog.csdn.net/luguifang2011/article/details/41476643
--------------------------------------------------------------------------------------
编写程序,下面的程序,要实现的功能是:
1、定义一个数组
int L[]={9,8,7,6,5,4,3,2,1};
2、把数组分成三部分,每部分用一个线程对其中数据按照降序排序;
由于要传多个参数,需要把参数组织进一个结构体内。
struct node
{
int *L;
int low;
int high;
};
分别是数组地址,排序区间【low,high】
3、准备参数
node p1={L,0,2};
node p2={L,3,5};
node p3={L,6,8};
4、创建线程进行排序
pthread_t id1,id2,id3;
int i,ret1,ret2,ret3;
ret1=pthread_create(&id1,NULL,&sort,&p1);
ret2=pthread_create(&id2,NULL,&sort,&p2);
ret3=pthread_create(&id3,NULL,&sort,&p3);
其中排序函数为:
void* sort(void *arg)
{//简单选择排序
node *tmp=(node*)arg;
int *a=tmp->L;
int low=tmp->low;
int high=tmp->high;
int i,j,t;
for(i=low;i<high;i++)
{
for(j=i+1;j<=high;j++)
{
if(a[j]<a[i])
{
t=a[i];a[i]=a[j];a[j]=t;
}
}
}
}
5、等待所有线程结束,然后打印排序后结果
pthread_join(id1,NULL);//waiting for the thread to terminate
pthread_join(id2,NULL);
pthread_join(id3,NULL);
for(i=0;i<sizeof(L)/sizeof(int);i++)
{
cout<<L[i]<<" ";
}
cout<<"\n";
return (0);
完成程序如下
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>;
#include <unistd.h>;
#include <pthread.h>;
#include <errno.h>;
#include<iostream>
using namespace std;
//the node struct is to covert parameters to thread
struct node
{
int *L;
int low;
int high;
};
void* sort(void *arg)
{//simple select sort
node *tmp=(node*)arg;
int *a=tmp->L;
int low=tmp->low;
int high=tmp->high;
int i,j,t;
for(i=low;i<high;i++)
{
for(j=i+1;j<=high;j++)
{
if(a[j]<a[i])
{
t=a[i];a[i]=a[j];a[j]=t;
}
}
}
}
int main(void)
{
pthread_t id1,id2,id3;
int i,ret1,ret2,ret3;
//
int L[]={9,8,7,6,5,4,3,2,1};
node p1={L,0,2};
node p2={L,3,5};
node p3={L,6,8};
//create a thread, cover the the parameter node to thread
ret1=pthread_create(&id1,NULL,&sort,&p1);
ret2=pthread_create(&id2,NULL,&sort,&p2);
ret3=pthread_create(&id3,NULL,&sort,&p3);
pthread_join(id1,NULL);//waiting for the thread to terminate
pthread_join(id2,NULL);
pthread_join(id3,NULL);
for(i=0;i<sizeof(L)/sizeof(int);i++)
{
cout<<L[i]<<" ";
}
cout<<"\n";
return (0);
}
结果:
从结果可以看出,每个段中数据都有序了。
Linux下要想利用多线程,必须配置编译器,如下:
点击Compiler
再设置
然后保存