How to "multithread" C code

c, multithreading

Solution

One alternative to multithread your code would be using pthreads ( provides more precise control than OpenMP ).

Assuming `x`, `y` & `result` are global variable arrays,

#include <pthread.h>

...

void *get_result(void *param)  // param is a dummy pointer
{
...
}

int main()
{
...
pthread_t *tid = malloc( ntimes * sizeof(pthread_t) );

for( i=0; i<ntimes; i++ ) 
    pthread_create( &tid[i], NULL, get_result, NULL );

... // do some tasks unrelated to result    

for( i=0; i<ntimes; i++ ) 
    pthread_join( tid[i], NULL );
...
}

(Compile your code with `gcc prog.c -lpthread`)

Problem

I have a number crunching application written in C. It is kind of a main loop that for each value calls, for increasing values of "i", a function that performs some calculations. I read about multithreading, and I am considering learning a bit about it, in C. I wonder if somehow general code like mine could be automatically multithreaded and how. Thanks P.D. To get an idea about my code, let's say that it is something like this: ``` main(...) for(i=0;i<=ntimes;i++)get_result(x[i],y[i],result[i]); ``` ... ``` void get_result(float x,float y,float result){ result=sqrt(log (x) + log (y) + cos (exp (x + y)); (and some more similar mathematical operations) } ```

Original source

Related problems