linux下单线程冒泡排序,2个线程共同处理冒泡排序 Linux 双线程处理

#include

#include

#include

#include

int arr[]={67,45,7,348,60,4,87,2,3,5};

int g_i=0;

pthread_t thread[2];

pthread_mutex_t mutex_1,mutex_2;//互斥锁

void print_arry()//打印数组

{

int i=0;

for(;i<10;i++)

{

printf("%d\t",arr[i]);

}

printf("\n");

}

void swap_elem(int *a,int *b)//交换地址中的值

{

int temp;

temp=*a;

*a=*b;

*b=temp;

}

void *entrance_1(void *arg)//线程1的处理函数

{

printf("1\n");

int j=0;

for(;g_i<10;g_i++)

{

pthread_mutex_lock(&mutex_2);

//      printf("1g_i=%d\n",g_i);

printf("线程1执行后台排序.\n");

for(j=0;j<10-g_i-1;j++)

{

if(arr[j]>arr[j+1])

{

swap_elem(&arr[j],&arr[j+1]);

}

}

pthread_mutex_unlock(&mutex_1);

}

return ((void *)1);

}

void *entrance_2(void *arg)//线程2的处理函数

{

printf("2\n");

int j=0;

for(;g_i<10;g_i++)

{

pthread_mutex_lock(&mutex_1);

// printf("2g_i=%d\n",g_i);

printf("线程2执行后台排序.\n");

for(j=0;j<10-g_i-1;j++)

{

if(arr[j]>arr[j+1])

{

swap_elem(&arr[j],&arr[j+1]);

}

}

pthread_mutex_unlock(&mutex_2);

}

return ((void *)2);

}

void create_two_thread()//创建2个线程

{

memset(thread,0,sizeof(thread));

if((pthread_create(&thread[0],NULL,entrance_1,NULL))==0)

{

printf("创建线程1成功\n");

}else{

printf("创建线程1失败\n");

exit(EXIT_FAILURE);

}

if((pthread_create(&thread[1],NULL,entrance_2,NULL))==0)

{

printf("创建线程2成功\n");

}else{

printf("创建线程2失败\n");

exit(EXIT_FAILURE);

}

}

void do_and_wait()//2线程执行与等待

{

void *ret[2];

if(thread[0]!=0)

{

pthread_join(thread[0],&ret[0]);

printf("\n线程1执行结束退出\n");

}else{

printf("线程1创建失败\n");

exit(EXIT_FAILURE);

}

if(thread[1]!=0)

{

pthread_join(thread[1],&ret[1]);

printf("\n线程2执行结束退出\n");

}else{

printf("线程2创建失败\n");

exit(EXIT_FAILURE);

}

printf("线程1的返回值为:%d\n",(int) ret[0]);

printf("线程2的返回值为:%d\n",(int) ret[1]);

pthread_mutex_destroy(&mutex_1);

pthread_mutex_destroy(&mutex_2);

}

int main()

{

printf("主函数,创建2个线程,共同实现冒泡排序\n");

pthread_mutex_init(&mutex_1,NULL);

pthread_mutex_init(&mutex_2,NULL);

print_arry();

create_two_thread();

do_and_wait();

printf("排序完成.\n");

print_arry();

return 0;

}

运行结果为:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值