Ich habe 2 Dateien (. C) eine für test (test.c) und in test.c Ich habe Hauptfunktion des Programms und auch ich habe eine andere Datei, die in test.c enthalten und in dem ich Threads erstellt, aber wann Ich lasse test.c Threads nicht laufen. Aber wenn ich Threads in der Hauptfunktion definiere, ist es richtig. Jetzt möchte ich wissen, können wir Thread in anderen Header-Dateien verwenden?Können wir Thread in anderen Header-Datei ausführen?
das ist mein Hauptcode:
include stdlib.h
include stdio.h
include time.h
include math.h
include "msort_pth.h"
//Dynamically allocate an array of size N in heap
void fillArray (int** values, unsigned int N)
{
srand(time(0));
unsigned int i;
for (i=0; i<N; i++)
(*values)[i] = rand() - (RAND_MAX/2);
}
//Check to see if the sorted array is really sorted!
void checkArray (const int* values, unsigned int N, const int* sorted)
{
unsigned int i;
for (i=0; i <= N-2; i++)
if (sorted[i]>sorted[i+1])
{
printf("ERROR i=%d %d %d", i, sorted[i], sorted[i+1]);
return;
}
printf("OK\n");
}
int main (int argc, char* argv[])
{
if (argc != 3){
printf("Please enter: \n ./a.out M K\n");
exit(1);
}
//input array
unsigned int K;
unsigned int N;
//Fill in the input array with random data
K = atoi(argv[2]);
N = pow(2, atoi(argv[1]));
int* values = (int*) malloc (sizeof(int) * N);
fillArray (&values, N);
//Sorted array
int* sorted = (int*) malloc (sizeof(int) * N);
//Sort the input array and report its runtime
clock_t t1 = clock();
mergeSortParallel (values, N, K, sorted);
clock_t t2 = clock();
printf("Runtime = %g ms \n", (t2-t1)/1000.0);
//Check for correctness
checkArray (values, N, sorted);
return 0;
}
und das ist mein Thread-Datei: (Einige unnötige Funktionen entfernt werden)
include "msort_pth.h"
include pthread.h
include stdio.h
include stdlib.h
define BLOCKSIZE 1
int* globalValues;
int* globalSorted;
int* globalTemp;
int globalN;
int globalK;
int thread_count;
void merge(int A[], int B[], int N, int* sorted);
void My_BubbleSort(const int* values, int Size, int* sorted);
void My_Sort(const int* values, unsigned int N, int* sorted, int BLOCK_SIZE);
void mergeSort(const int* values, unsigned int N, int* sorted);
void* threadFunc(void* rank);
void mergeSortParallel (const int* values, unsigned int N, unsigned int K, int* sorted)
{
globalK=K;
globalN=N;
globalValues=(int*)malloc(sizeof(int)*N);
globalSorted=(int*)malloc(sizeof(int)*N);
globalTemp=(int*)malloc(sizeof(int)*N);
int i=0;
for(i=0;i<N;i++)
{
globalValues[i]=values[i];
}
pthread_t* thread_handles;
long thread=0;
thread_handles=malloc(thread_count*sizeof(pthread_t));
for(thread=0;thread<thread_count;thread++)
{
pthread_create(&thread_handles[thread],NULL,threadFunc,(void*)thread);
}
for(thread=0;thread<thread_count;thread++)
{
pthread_join(thread_handles[thread],NULL);
}
free(thread_handles);
printf("GLOBAL VALUES:\n");
for(i=0;i<N;i++)
{
printf("%d,",values[i]);
}
printf("\n");
printf("\n");
printf("GLOBAL Sorted:\n");
for(i=0;i<N;i++)
{
printf("%d,",globalSorted[i]);
}
/*
int j=0;
int length=0;
for(j=0;j<globalK;j++)
{
int p=globalK-j;
int level=pow(2,p);
length=globalN/level;
for(i=0;i<level;i++)
{
merge(globalSorted+i*length,globalSorted+(i+1)*length,length,globalTemp);
}
for(i=0;i<2*length;i++)
{
}
}
*/
}
void* threadFunc(void* rank)
{
long myrank=(long)rank;
printf("\n MY rank is: %ld \n",myrank);
int start=myrank*(globalN/thread_count);
int length=globalN/thread_count;
mergeSort(globalValues+start,length,globalSorted+start);
return NULL;
}
Die Frage, die mir nicht ganz klar. Im Allgemeinen 1.) wird jedoch kein .c von einem .c. 2.) man legt den auszuführenden Code nicht in einen Header (.h). – alk
Bitte zeigen Sie uns den fehlerhaften Code. Wo Sie Code eingeben, hat normalerweise keine Wirkung. – fuz
Ich erwartete "ThredFunc" etwas auf dem Display drucken, aber es tat es nicht. – Mehdi