int apply(void *p){ TRY ... EXCEPT (Thread_Alerted) Thread_exit(EXIT_FAILURE); END_TRY; Thread_exit(EXIT_SUCCESS); }
static unsigned __stdcall start(void *p) { T t = p; Except_stack = NULL; Thread_exit((*t->apply)(t->args)); return 0; }
void *Thread::entryPoint(void *threadp) { Thread *thread=(Thread *)threadp; thread->m_alive=true; thread->m_id=(unsigned int)Thread_currentThread(); thread->run(); thread->m_alive=false; Thread_exit(); }
int main(int argc, char *argv[]) { struct args args; Thread_init(); args.c = Chan_new(); Thread_new((int (*)(void *))source, &args, sizeof args, NULL); args.n = argc > 2 ? atoi(argv[2]) : 5; args.nprime = argc > 1 ? atoi(argv[1]) : 100; Thread_new((int (*)(void *))sink, &args, sizeof args, NULL); Thread_exit(0); return 0; }
int main(int argc, char* argv[]) { struct args args; Thread_init(1, NULL); args.c = Chan_new(); Thread_new(source, &args, sizeof args, NULL); args.n = argc > 2 ? atoi(argv[2]) : 5; args.last = argc > 1 ? atoi(argv[1]) : 1000; Thread_new(sink, &args, sizeof args, NULL); Thread_exit(EXIT_SUCCESS); return EXIT_SUCCESS; }
main(int argc, char *argv[]) { int i, n = 100000, *x, preempt; preempt = Thread_init(1, NULL); assert(preempt == 1); if (argc >= 2) n = atoi(argv[1]); x = CALLOC(n, sizeof (int)); srand(time(NULL)); for (i = 0; i < n; i++) x[i] = rand(); sort(x, n, argc, argv); for (i = 1; i < n; i++) if (x[i] < x[i-1]) break; assert(i == n); Thread_exit(EXIT_SUCCESS); return EXIT_SUCCESS; }
int main(int argc, char *argv[]){ int m = 5; int preempt; preempt = Thread_init(1, NULL); assert(preempt == 1); if (argc >= 2){ m = atoi(argv[1]); } n = 0; // increment n unsafely { int i; for (i = 0; i < m; i++){ Thread_new(unsafe, &n, 0, NULL); // 创建m个线程 } Thread_join(NULL); } Fmt_print("%d == %d\n", n, NBUMP * m); n = 0; // increment n safely { int i; struct args args; Sem_T mutex; Sem_init(&mutex, 1); args.mutex = &mutex; args.ip = &n; for (i = 0; i < m; i++){ Thread_new(safe, &args, sizeof(args), NULL); } Thread_join(NULL); } Fmt_print("%d == %d\n", n, NBUMP * m); Thread_exit(EXIT_SUCCESS); return EXIT_SUCCESS; }
int main(int argc, char *argv[]) { int i, j; int m = argc > 1 ? atoi(argv[1]) : 4; int n = argc > 2 ? atoi(argv[2]) : 3; Thread_init(); Sem_init(&mutex, 1); for (j = 0; j < n; j++) { struct args args; args.mutex = &mutex; args.ip = &y; for (i = 0; i < m; i++) Thread_new((int (*)(void *))incr, &args, sizeof args, NULL); Thread_join(0); if (y != m*10000) printf("%d:%d\n", j, y); y = 0; } Thread_exit(0); return 0; }