C , how to create thread using pthread_create function
clarifying duskwuff's answer:
work
parameter is a function pointer. The function should take one argument which is indicated as type void *
and return value void *
.
param
is expected to be a pointer to the data that work
will receive.
As an example, lets say you want to pass two int to the worker. Then, you can create something like this:
int *param = (int *)malloc(2 * sizeof(int));
param[0] = 123;
param[1] = 456;
pthread_create(&cThread, NULL, work, param);
Then your work function can convert the pointer type and grab the param data:
void *work(void * parm) {
int *param = (int *)parm;
int first_val = param[0];
....
}
You can do more complex stuff, like creating a struct with all of the data you need to pass.
The four parameters to pthread_create
are, in order:
A pointer to a
pthread_t
structure, whichpthread_create
will fill out with information on the thread it creates.A pointer to a
pthread_attr_t
with parameters for the thread. You can safely just passNULL
most of the time.A function to run in the thread. The function must return
void *
and take avoid *
argument, which you may use however you see fit. (For instance, if you're starting multiple threads with the same function, you can use this parameter to distinguish them.)The
void *
that you want to start up the thread with. PassNULL
if you don't need it.