С.创建线程

Posted

技术标签:

【中文标题】С.创建线程【英文标题】:С.Creating threads 【发布时间】:2021-12-01 22:04:50 【问题描述】:

任务如下:

编写一个程序,将一组数据文件名(任意数字)作为参数,并运行所有文件以进行并行处理(使用线程)。作为处理,使用排序方式(quickSort)。

我通过 QNX 操作系统上的 vmbox 运行了这个程序。它已经编译但什么也没做。我的项目文件夹中有一个带有数字的文本文件,它们没有任何反应。或者应该有几个..(i意思是文件)还有一件事。编译时收到一个警告。在这个标志之后,它“关闭”了void *FileToArray 警告如下:控制到达非无效函数的结尾。如何解决?

我是根据方法指南做的。但也许我错过了一些东西。如果你能告诉我我做错了什么,我将不胜感激。

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <sys/syspage.h>


void quickSort (int *b,int left, int right)
    int sort;
    int Dleft = left;
    int Dright = right;
    sort = b[left];
    printf ("%d",pthread_self());
    while(left<right)
        while((b[right]>=sort)&&(left<right))
        right--;
        if (left!=right)
            b[left]=b[right];
            left++;
        
        while((b[left]<=sort)&&(left<right))
        left++;
        if(left!=right)
        
            b[right]=b[left];
            right --;
        
    
    b[left]=sort;
    sort=left;
    left=Dleft;
    right=Dright;
    if(left<sort)
    quickSort(b,left,sort-1);
    if(right>sort)
    quickSort(b,sort+1,right);
    

void *FileToArray(void *name)
    int i =0,j =0;
    int *a=(int*)malloc(sizeof(int)*2);
    FILE *f=fopen(name,"r");
    printf("start - %p\n",name);
    while (feof(f)==0)
        fscanf(f, "%d",&a[i]);
        i++;
        a=(int*)realloc(a,sizeof(int)*i+1);
    
    fclose(f);
    quickSort(a,0,i-2);
    f=fopen(name,"w");
    for (j=0;j<i-1;j++)
        fprintf(f, "%d\n",a[j]);
    
    free(a);
    fclose(f);
    printf("finish - %p\n",name);

int num_lines_per_cpu;
int num_cpus;
int main(int argc, char** argv) 
    int j;
    pthread_t *thread_ids;
    num_cpus = syspage_ptr->num_cpu;
    thread_ids=malloc(sizeof(pthread_t)*num_cpus);
    num_lines_per_cpu=argc%num_cpus;
    for(j=1;j<argc;j++)
        pthread_create (&thread_ids[j-1],NULL,FileToArray,argv[j]);
    
    for(j=0;j<argc-1;j++)
        pthread_join(thread_ids[j],NULL);
    
    return EXIT_SUCCESS;

【问题讨论】:

评论不用于扩展讨论;这个对话是moved to chat。 【参考方案1】:

警告如下:control达到非void的结尾 功能。如何解决?

正如它所说,你没有从你的函数中返回任何东西,但返回类型是void*

除非我错过了,否则在该函数中没有任何地方返回指针。

【讨论】:

以上是关于С.创建线程的主要内容,如果未能解决你的问题,请参考以下文章

十五、线程池(六)自动创建线程池的弊端

线程池的创建

vc如何创建 线程池

如何创建线程?如何保证线程安全?

创建线程的方式

管理线程之创建线程