目前我正在研究一個使用線程來計算平方根總和的程序。我的程序工作正常,但其中一個要求是使用主線程來查找初始值,並且一旦我從main調用函數Void * calc,程序就會中斷。有沒有某種方法可以進行這樣的函數調用?這是因爲函數是一個指針嗎?任何幫助表示讚賞。從主C中調用void *函數C
#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);
}
該程序中斷,因爲在函數似乎只被調用一次,而不是每個線程使用函數。打印出的唯一值是一些模糊的不正確的數字。
你是什麼意思的「程序中斷?」 – templatetypedef
在for循環創建線程開始之前調用Calc。 – Ranma344
當'i'是'int'時,我不喜歡'(void *)i''。在這種情況下,它可能按預期工作,但我相信這是實現定義的。 –