#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;
}