I have a pthread pointer, and I need to allocate enough space for the pointer to hold enough number of pthread. Then initialize them and pthread_create() to pass thread to some functions.
The problem is that if I just use malloc to allocate space to the pointer, then just pthread_create using pointer[index], then the thread will not be created properly. How do I fix this problem? I believe pthread_t is some type of struct, so I believe I need to initialize them before I do pthread. how do I do that? thank you.
I just tested with certain amount of pthread that they worked properly:
pthread_t t1, t2, t3 ...... tn;
then
pthread_create(&t1, NULL, function, (void *)argument)
But if I use pointer and malloc, they wont work.Thread will not be created.
pthread_t *ptr;
ptr = malloc(sizeof(pthread_t)*num);
then
pthread_create(&ptr[index], NULL, function, (void *)argument)
will not work. How do I initialize then ptr[index] in this case?
yes, it should work. what is your some space
?
You did not put complete code, but just a suggestion, did you initialize num
?
Check the below code. I believe it's working.
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void* func(void* id)
{
int *c;
c = (int*)id;
if(c)
printf("%d\n", *c);
}
int main(int argc, char *argv[])
{
int i = 0;
int *index = NULL;
int num;
pthread_t *ptr;
if (argv[1])
num = atoi(argv[1]);
index = calloc (num, sizeof (int));
for(i = 0; i < num; i++)
{
index[i] = i;
}
ptr = malloc(sizeof(pthread_t)*num);
for(i = 0; i < num; i++)
{
pthread_create(&ptr[i], NULL, func, (void*)&index[i]);
}
for(i = 0; i < num; i++)
pthread_join(ptr[i], NULL);
return 0;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With