在C中从main调用void*函数

在C中从main调用void*函数,c,multithreading,function,void,C,Multithreading,Function,Void,目前我正在开发一个程序,它使用线程来计算平方根的和。我的程序可以运行,但是其中一个要求是使用主线程来查找初始值,一旦我从main调用函数Void*calc,程序就会中断。有没有某种方法可以进行这样的函数调用?这是因为函数是指针吗?感谢您的帮助 #include <pthread.h> #include <stdio.h> #include <math.h> #include <unistd.h> #define NUM_THREADS 3 int

目前我正在开发一个程序,它使用线程来计算平方根的和。我的程序可以运行,但是其中一个要求是使用主线程来查找初始值,一旦我从main调用函数Void*calc,程序就会中断。有没有某种方法可以进行这样的函数调用?这是因为函数是指针吗?感谢您的帮助

#include <pthread.h>
#include <stdio.h>
#include <math.h>
#include <unistd.h>
#define NUM_THREADS 3
int ARGV;
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
double total = 0;


void *calc(void* t){
    int ph = (int)t + 1;
    int start, stop, interval_size;
    interval_size = ARGV/(NUM_THREADS + 1);
    start = ((ph) * interval_size) + 1;
    stop = (ph * interval_size) + 1;
    double ttl;
    int i;

    for (i = start; i <= stop; i++){
            ttl = ttl + sqrt(i);
            printf("Total Thread %i %lf\n", ph, ttl);
        }


    pthread_mutex_lock(&m);
    total = total + ttl;
    pthread_mutex_unlock(&m);

    pthread_exit(NULL);
}

int main(int argc, char* argv[]) {

    int i;
    double ttl;
    ARGV =  atoi(argv[1]);

    pthread_t ti[NUM_THREADS];

    calc(0);
    for (i = 0; i < NUM_THREADS; i++) {
        pthread_create(&ti[i], NULL, calc,(void *)i);
    }
    /*for (i = 1; i <= (ARGV / 4) ; i++){
            ttl = ttl + sqrt(i);    
    }*/
    for (i = 0; i < NUM_THREADS; i++)   {
        pthread_join(ti[i], NULL);
    }

    total = total + ttl;

    printf("Result: %lf\n", total);
}
#包括
#包括
#包括
#包括
#定义NUM_线程3
int-ARGV;
pthread\u mutex\u t m=pthread\u mutex\u初始值设定项;
双倍合计=0;
void*calc(void*t){
int ph=(int)t+1;
int开始、停止、间隔大小;
间隔大小=ARGV/(线程数+1);
开始=((ph)*间隔大小)+1;
停止=(ph*间隔大小)+1;
双ttl;
int i;

对于(i=start;i您的
calc
函数没有
pthread\u exit
。现在
pthread\u exit
可以并且应该从主线程调用,所以这很好

要允许其他线程继续执行,主线程 应该通过调用pthread_exit()而不是exit(3)来终止


但是由于这发生在创建任何其他线程之前,因此程序会直接退出,而不会启动其他线程。

你说的“程序中断”是什么意思?在创建线程的for循环开始之前调用Calc。我不喜欢
(void*)当
i
int
时,我非常喜欢它。在这种情况下,它可能会按预期工作,但我相信这是实现定义的。@WhozCraig有一个直接的
calc(0)
。啊..好吧,hells bells。捕捉得好。(+1)