I\'m making a c file for a dispatch queue that gets a task and put it in to a queue which is the linked list. In order to do this, I need to create threads using
The four parameters to pthread_create
are, in order:
A pointer to a pthread_t
structure, which pthread_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 pass NULL
most of the time.
A function to run in the thread. The function must return void *
and take a void *
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. Pass NULL
if you don't need it.
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.