#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_main(void *data)
{
long n;
int i;
n = (long)data;
for (i = 0; i < 10; i++)
{
usleep(100000);
printf("[p%ld] i = %d\n", n, i);
}
return data;
}
int main(int argc, char *argv[])
{
int num;
pthread_attr_t attr;
pthread_t *pid_arr;
long *ret_arr;
long i;
if (argc < 2)
{
printf("Usage: %s thread_number\n", argv[0]);
return 1;
}
num = atoi(argv[1]);
if (num < 1)
{
printf("thread_number must greater than zero!\n");
return 1;
}
pid_arr = (pthread_t *)calloc((size_t)num, sizeof(pthread_t));
ret_arr = (long *)calloc((size_t)num, sizeof(long));
pthread_attr_init(&attr);
for (i = 0; i < num; i++)
{
pthread_create(&pid_arr[i], &attr, thread_main, (void *)i);
}
for (i = 0; i < num; i++)
{
pthread_join(pid_arr[i], (void **)&ret_arr[i]);
printf("[p%ld] return = %ld\n", i, ret_arr[i]);
}
pthread_attr_destroy(&attr);
free(pid_arr);
free(ret_arr);
return 0;
}