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

Why isn't my thread storing its result in an array before the program completes?

我已经四处寻找了好一阵子,但似乎没有任何解决方案(例如 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;
}

如果删除关于 sleep(1) 的注释,我会得到我想要的 100000,否则我会得到全零,但显然我不希望它休眠。

tid[i] = pthread_create(&tid[i], NULL, setResult, NULL); 使用 pthread_create() 调用中的值 return 将 tid[i] 丢弃。

pthread_create() return 表示成功 (0) 或失败(错误编号)——它不是 return 一个 pthread_t 对象。

很可能,您对 pthread_join() 的调用立即 returning 并出现错误。