Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么不是';在程序完成之前,我的线程是否将其结果存储在数组中?_C_Pthreads - Fatal编程技术网

C 为什么不是';在程序完成之前,我的线程是否将其结果存储在数组中?

C 为什么不是';在程序完成之前,我的线程是否将其结果存储在数组中?,c,pthreads,C,Pthreads,我已经四处寻找了很长一段时间,但似乎没有任何解决方案——如thread_join或pthread_exit——适合我。我试图让一个线程(如果我能让一个线程工作的话,几个线程)计算一些东西,如果成功的话,将1存储在零数组中的一个位置上,但是我的程序在线程编辑数组之前完成(或者至少打印数组)。以下是一些等效代码: #include <stdio.h> #include <stdlib.h> #include <pthread.h> #define numThre

我已经四处寻找了很长一段时间,但似乎没有任何解决方案——如thread_join或pthread_exit——适合我。我试图让一个线程(如果我能让一个线程工作的话,几个线程)计算一些东西,如果成功的话,将1存储在零数组中的一个位置上,但是我的程序在线程编辑数组之前完成(或者至少打印数组)。以下是一些等效代码:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define numThreads 1
#define resultSize 6

/* function definitions */
void setZero(int[]);
void printResultArray(int[]);
void *setResult(void *);

int resultArray[resultSize];

/* main Program */
int main(void) {
    int i = 0;
    pthread_t tid[numThreads];
    setZero(resultArray);   
    printf("Creating worker thread..\n");
    for(i = 0;i < numThreads; i++)
        tid[i] = pthread_create(&tid[i], NULL, setResult, NULL);
    for(i = 0;i < numThreads; i++)
        pthread_join(tid[i], NULL);

  //  sleep(1);
    printf("Array values: ");
    printResultArray(resultArray);
    pthread_exit(NULL);
}

void *setResult(void *param){
    resultArray[0] = 1;
    pthread_exit(NULL);
}

void printResultArray(int results[]) {
    int i;
    for(i=0; i<resultSize; i++) 
        printf("%d ", results[i]);
     printf("\n");
}

void setZero(int results[]) {
    int i;
    for(i=0; i<resultSize; i++) 
        results[i] = 0;
}
#包括
#包括
#包括
#定义numThreads 1
#定义结果大小6
/*函数定义*/
void setZero(int[]);
无效打印结果数组(int[]);
void*设置结果(void*);
int resultArray[resultSize];
/*主程序*/
内部主(空){
int i=0;
pthread_t tid[numThreads];
setZero(resultArray);
printf(“创建工作线程..\n”);
对于(i=0;i对于(i=0;i
tid[i]=pthread_create(&tid[i],NULL,setResult,NULL);
使用
pthread_create()
调用返回的值对
tid[i]
进行垃圾处理

返回成功(0)或失败(错误号)的指示-它不返回
pthread\t
对象

最有可能的是,您对
pthread\u join()
的调用会立即返回并出现错误