将数组传递给C中的线程例程

时间:2017-11-22 11:03:10

标签: c arrays multithreading

我有一个函数使用四个线程来处理数组的不同部分,我不知道的问题是我应该将数组传递给线程例程,这里是一个代码示例:

#define         RANGE_STEP1                 1024 / 4
#define         QUARTER                     RANGE_STEP1 / 4

struct thread_data
{
   unsigned start;
   unsigned stop;
};

#define         NUM_THREADS                     4
struct thread_data thread_data_array[NUM_THREADS];
pthread_t threads[NUM_THREADS];

void routine(void *thread_info)
{
   int n;
   unsigned t_start,t_stop;
   struct thread_data *mydata;

   mydata = (struct thread_data*) thread_info;
   t_start = mydata->start;
   t_stop  = mydata->stop;

   for (n = 0; n < RANGE_STEP1; n++)
   { 
       result1[n] = (data1[n] + data2[n])/2; // Error : error: ‘data1’ undeclared (first use in this function) ...
       result1[n] = (data1[n] - data2[n])/2; // Error . error: ‘data2’ undeclared (first use in this function) ...
   }
   pthread_exit(NULL);
}

void foo(float* data1, float* data2,float* result1,float* result2)
{
   unsigned t,i=0;
   for(t=0;t<RANGE_STEP1;t+=QUARTER)
   {
       thread_data_array[i].start       = t;
       thread_data_array[i].stop           = t+QUARTER-1;
       pthread_create(&threads[i],NULL,routine,(void *)&thread_data_array[i]);
       i++;
   }
   pthread_exit(NULL);
}

因此,正如您在示例中看到的 data1 data2 result1 result2 是数组我想要线程例程,我认为通过结构传递它是不合逻辑的,因为它在for()循环中被重写了4次。

1 个答案:

答案 0 :(得分:1)

如果您不希望通过结构传递它(通过添加和设置数据和结果的元素),您可以通过全局变量传递它们,例如:克。

static float *data1, *data2, *result1, *result2;

void *routine(void *thread_info)
{
   …
}

void foo(float *Data1, float *Data2, float *Result1, float *Result2)
{
    data1 = Data1, data2 = Data2, result1 = Result1, result2 = Result2;
   …
}