1 // Create threads in such a way that there is a realistic chance that the
2 // parent thread finishes before the created thread finishes.
6 #include <limits.h> /* PTHREAD_STACK_MIN */
12 static pthread_t s_thread
[1000];
13 static int s_arg
[1000];
15 static void* thread_func(void* p
)
17 int thread_count
= *(int*)(p
);
23 // std::cout << "create " << thread_count << std::endl;
24 s_arg
[thread_count
] = thread_count
;
25 pthread_attr_init(&attr
);
26 pthread_attr_setstacksize(&attr
, PTHREAD_STACK_MIN
);
27 pthread_create(&s_thread
[thread_count
], &attr
, thread_func
,
28 &s_arg
[thread_count
]);
29 pthread_attr_destroy(&attr
);
31 std::cout
<< "created " << thread_count
<< "(" << s_thread
[thread_count
]
38 int main(int argc
, char** argv
)
41 unsigned thread_count
;
44 thread_count
= argc
> 1 ? atoi(argv
[1]) : 50;
45 assert(thread_count
<= sizeof(s_thread
) / sizeof(s_thread
[0]));
46 assert(thread_count
>= 1);
48 // std::cout << "create " << thread_count << std::endl;
49 pthread_attr_init(&attr
);
50 pthread_attr_setstacksize(&attr
, PTHREAD_STACK_MIN
);
51 pthread_create(&s_thread
[thread_count
], &attr
, thread_func
,
53 pthread_attr_destroy(&attr
);
55 std::cout
<< "created " << thread_count
<< "(" << s_thread
[thread_count
]
58 for (i
= thread_count
; i
>= 0; i
--)
60 // std::cout << "join " << i << "(" << s_thread[i] << ")" << std::endl;
61 pthread_join(s_thread
[i
], 0);