私は2つのファイル(.c)を1つのテスト(test.c)とtest.cに持っています。私はプログラムのmain関数を入れて、test.cに含まれている別のファイルを持っています。私はtest.cのスレッドを実行しないでください実行します。しかし、私が主要な機能のスレッドを定義するなら、それは正しいです。今私は他のヘッダーファイルでスレッドを使用できるのか知りたいですか?他のヘッダファイルにスレッドを実行できますか?
これは私のメインのコードです:
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;
}
と、これは私のスレッドファイルです:私が正しくあなたの質問を理解している場合 (いくつかの不要な機能が削除されます)
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;
}
質問は私には非常に明確ではありません。しかし、一般的に1.)は.cから.cを含んでいません。 2.)ヘッダー(.h)に実行されるコードを入れない。 – alk
問題のあるコードを表示してください。あなたがコードを置く場所は、通常、効果がありません。 – fuz
私は "ThredFunc"が何かをディスプレイに表示することを期待しましたが、それはしませんでした。 – Mehdi