编写一个多线程函数实现对数组排序,要求: 1.至少用两个线程 2.数组的元素值可以事先定义好,或者可以从键盘输入(增加一个线程)。 3.用一个线程对数组排序,用另一个线程输出排序结果。 4.保证先排好

Posted 我有一壶酒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编写一个多线程函数实现对数组排序,要求: 1.至少用两个线程 2.数组的元素值可以事先定义好,或者可以从键盘输入(增加一个线程)。 3.用一个线程对数组排序,用另一个线程输出排序结果。 4.保证先排好相关的知识,希望对你有一定的参考价值。

#include"stdio.h"
#include"pthread.h"
#include"semaphore.h"

static int datbuf[10] = {0};
static int n;
sem_t sem1,sem2,sem3;

void *do_input(void *pvoid)
{
    int i;
   
    sem_wait(&sem1);
   
    
    printf("please input data\n");
    for(i = 0;;i++)
    {
      scanf("%d",&datbuf[i]);
      n++;
      if(getchar()==\n)
         break;
    }
    sem_post(&sem2);
    pthread_exit(NULL);
    
}
void *do_swap(void *pvoid)
{
  int i,j,min;

  sem_wait(&sem2);
  printf("data:\n");    
  for(i = 0; i<n;i++)
  {
    printf(" %d",datbuf[i]);
  }
  printf("\nswap:\n");
  for(i = 0;i < n;i++)
  {
    for(j = 0;j<n-i-1;j++)
      if(datbuf[j]>datbuf[j+1])
       {   
         min = datbuf[j];
         datbuf[j] = datbuf[j+1];
         datbuf[j+1] = min;
       }   
  }
  sem_post(&sem3);
  pthread_exit(NULL);
}


void *do_show(void *pvoid)
{
  int i;
  
  sem_wait(&sem3);
  for(i = 0; i<n;i++)
  {
    printf(" %d",datbuf[i]);
  }
  sem_post(&sem1);
  pthread_exit(NULL);
}

int main()
{
  pthread_t tid1,tid2,tid3;
  int ret;
  
  ret = sem_init(&sem1,0,1);
  ret += sem_init(&sem2,0,0);
  ret += sem_init(&sem3,0,0);
  if(ret != 0)
  {
     printf("Any semaphore inittialization failed\n");
     return ret;
  }
  
  pthread_create(&tid1,NULL,&do_input,NULL);
  pthread_create(&tid2,NULL,&do_show,NULL);
  pthread_create(&tid3,NULL,&do_swap,NULL);
  
  pthread_join(tid1,NULL);
  pthread_join(tid2,NULL);
  pthread_join(tid3,NULL);
  return 0;
}

 

以上是关于编写一个多线程函数实现对数组排序,要求: 1.至少用两个线程 2.数组的元素值可以事先定义好,或者可以从键盘输入(增加一个线程)。 3.用一个线程对数组排序,用另一个线程输出排序结果。 4.保证先排好的主要内容,如果未能解决你的问题,请参考以下文章

实验十一:指针

用数组编写C语言程序

要求编写一自定义函数sort,完成对n个字符串的降序排序?

ZZNUOJ_用C语言编写程序实现1177:字符串排序(指针专题)(附完整源码)

编写函数可以对任意个整型元素 的数组排序,用指针实现函数原型为sort(int*p,intn),其

编写对具有n个元素的一维数组求和函数ArraySum()