• 编写一个多线程函数实现对数组排序,要求: 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
    ");
        for(i = 0;;i++)
        {
          scanf("%d",&datbuf[i]);
          n++;
          if(getchar()=='
    ')
             break;
        }
        sem_post(&sem2);
        pthread_exit(NULL);
        
    }
    void *do_swap(void *pvoid)
    {
      int i,j,min;
    
      sem_wait(&sem2);
      printf("data:
    ");    
      for(i = 0; i<n;i++)
      {
        printf(" %d",datbuf[i]);
      }
      printf("
    swap:
    ");
      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
    ");
         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;
    }
  • 相关阅读:
    xcode swift对应版本
    VM12安装OS X10.11步骤及说明
    Java开发Webservice的组件
    xml文件格式说明
    android开发中在界面上实现曲线图的几个开源项目
    C#中SQL Server数据库连接池使用及连接字符串部分关键字使用说明
    c#对数据库访问完应关闭连接
    I2C VHDL程序
    数码管一些列功能的verilog实现
    PWM控制灯亮暗的verilog实现
  • 原文地址:https://www.cnblogs.com/yihujiu/p/5523814.html
Copyright © 2020-2023  润新知