1234567891011121314151617181920212223242526272829303132333435363738394041 |
- /*
- g++ huge-threads.cpp ../../objs/st/libst.a -g -O0 -o huge-threads && ./huge-threads 60000
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include "../../objs/st/st.h"
- void* pfn(void* arg) {
- char v[32*1024]; // 32KB in stack.
- for (;;) {
- v[0] = v[sizeof(v) - 1] = 0xf;
- st_usleep(1000 * 1000);
- }
- return NULL;
- }
- int main(int argc, char** argv) {
- if (argc < 2) {
- printf("Usage: %s nn_coroutines [verbose]\n", argv[0]);
- exit(-1);
- }
- st_init();
- int nn = ::atoi(argv[1]);
- printf("pid=%d, create %d coroutines\n", ::getpid(), nn);
- for (int i = 0; i < nn; i++) {
- st_thread_t thread = st_thread_create(pfn, NULL, 1, 0);
- if (!thread) {
- printf("create thread fail, i=%d\n", i);
- return -1;
- }
- if (argc > 2) {
- printf("thread #%d: %p\n", i, thread);
- }
- }
- printf("done\n");
- st_thread_exit(NULL);
- return 0;
- }
|