  #include<stdio.h>
  #include<stdlib.h>
  #include<string.h>
  #include<pthread.h>
  #include<errno.h>
  #include<unistd.h>
 
  #define THREAD_NUM 30000
  #define MAL_SIZE (8*1024*1024)
 
 void *wait_thread(void *args)
 {
 	void *addr;
 
 	addr = malloc(MAL_SIZE);

#if 0
 	if(addr)
 		memset(addr, 1, MAL_SIZE);
#endif
 	sleep(10);
 
 	return NULL;
 }
 
 void *wait_thread2(void *args)
 {
 	sleep(60);
 
 	return NULL;
 }
 
 int main(int argc, char *argv[])
 {
 	int i;
 	pthread_t thread[THREAD_NUM], th;
 	int ret, count = 0;
 	pthread_attr_t attr;
 
 	ret = pthread_attr_init(&attr);
 	if(ret) {
 		perror("pthread_attr_init");
 	}
 
 	ret = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
 	if(ret) {
 		perror("pthread_attr_setdetachstate");
 	}
 
 	for (i = 0; i < THREAD_NUM; i++) {
 		ret = pthread_create(&th, &attr, wait_thread, NULL);
 		if(ret) {
 			fprintf(stderr, "[%d] ", count);
 			perror("pthread_create");
 		} else {
 			printf("[%d] create OK.\n", count);
 		}
 		count++;
 
 		ret = pthread_create(&thread[i], &attr, wait_thread2, NULL);
 		if(ret) {
 			fprintf(stderr, "[%d] ", count);
 			perror("pthread_create");
 		} else {
 			printf("[%d] create OK.\n", count);
 		}
 		count++;
 	}
 
 	sleep(3600);
 	return 0;
 }
