2个线程共同处理冒泡排序 Linux 双线程处理
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<pthread.h>
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;
}
运行结果为:
2个线程共同处理冒泡排序 Linux 双线程处理相关推荐
- Linux 线程并发拷贝,【Linux】线程并发拷贝程序
据说大连某211高校的李教授越来越重口,不仅延续要求他所带的每一个本科班,都要写一份线程并发拷贝程序的传统,而且还开始规定不能用Java语言写作,导致我之前写的<[Java]线程并发拷贝程序&g ...
- linux 线程与进程 pid,linux下线程所属进程号问题
这一段看<unix环境高级编程>,一个关于线程的小例子. #include #include #include pthread_t ntid; void printids(const ch ...
- linux进程线程视频百度云,linux 进程线程时间片
aero 回复于:2003-08-10 21:01:44 偶觉得,已经不菜了. 如果你菜,那偶就还是鸟蛋了. coolhome 回复于:2003-08-10 20:27:00 [code:1:334e ...
- linux线程切换回调函数,linux C线程退出回调函数
待补充.................... 函数原型 void pthread_cleanup_push(void (*routine)(void*), void *arg); void pthr ...
- linux malloc 线程,Linux上的侧线程的malloc/calloc崩溃
我正在用C写一个服务器 - 客户端应用程序,共享一些信息.服务器以双线程模式工作 - 主线程等待输入,而侧线程响应客户端的请求.客户端也是这样工作的,但它等待用户输入(来自stdin),并且如果它接收 ...
- linux取消线程的原理,浅析 Linux 进程与线程
简介 进程与线程是所有的程序员都熟知的概念,简单来说进程是一个执行中的程序,而线程是进程中的一条执行路径.进程是操作系统中基本的抽象概念,本文介绍 Linux 中进程和线程的用法以及原理,包括创建.消 ...
- linux杀死线程函数,Linux线程-pthread_kill
该函数可以用于向指定的线程发送信号: int pthread_kill(pthread_t threadId,int signal); 如果线程内不对信号进行处理,则调用默认的处理程式,如SIGQUI ...
- 初识Linux C线程
线程与进程 进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位,线程在某种程度上可以看做轻量级的进程. 每个进程都有独立的代码和数据空间,程序间的切换会有较大开销:同一组线程可以共享代 ...
- Linux 双网卡绑定测试
Linux 双网卡绑定测试 先介绍一下情况,服务器A和服务器B都是CentOS 4.6的系统,现在要做HA Cluster,为了避免裂脑的发生,要提高心跳链路的可靠性,下图是现时的连接情况,服务器A的 ...
最新文章
- 现实世界的Windows Azure:采访圣地亚哥公共安全小组的技术经理Adrian Gonzalez
- cmd不是内部命令解决方法
- ftp服务器账户密码修改,ftp服务器如何设置账户密码
- centeros /redhate密码破解
- 12-思科防火墙:ASA会话超时
- 烽火服务器怎么进入bios系统,装机高手告诉你如何进入bios
- oracle删除已创建的用户,ORACLE用户创建删除
- CSS:实现文本超出显示省略效果(可指定几行显示)
- python df共有几行_从zero到hero,一款Python自然语言处理效率利器!
- CSDN 总部落户长沙,共建中国开发者产业中心城市!
- web 前端 html
- Spring 通过XML配置装配Bean
- 3D数学 学习笔记(4) 几何图元
- 一套完整的网络视频监控系统设计方案
- android睡眠伴侣,GitHub - HuangZengPei/Sleepmon: 我的Android团队项目,一款可以监测、统计睡眠质量情况的睡眠健康伴侣应用。...
- SpringBoot整合Tomcat中的组件
- 分享30个优秀的网站导航设计案例
- 系统集成项目管理工程师学习
- 交通·未来系列学术活动第1期:时空交通数据预测方法及应用
- cgb2007-京淘day16