#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;
}
运行结果为: