zoukankan      html  css  js  c++  java
  • 编写一个多线程函数实现对数组排序,要求: 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;
    }
  • 相关阅读:
    Matlab将字符串改成变量名-eval
    Workbench-材料库
    UG-装配
    FreeCAD将Macro自定义到工具栏
    FreeCAD加载ui文件显示于组合浏览器
    字符生成线条字-xdd1997
    ANSYS求解器
    常用物理量及其单位以及材料信息
    Appium | UiAutomator exited unexpectedly with code 0, signal null
    【转】windows改变Sublime选中背景颜色
  • 原文地址:https://www.cnblogs.com/yihujiu/p/5523814.html
Copyright © 2011-2022 走看看