Linux下C语言验证多线程-分段排序

知识点:用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

 

再设置 

然后保存

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值