/*** thread.c ******************************/ /* * Copyright (C) 1998 John Haskins, Jr. */ /*******************************************/ #include #include "lwt.h" int main(int, char **); void delay(int); void bart(void); void lisa(void); void maggie(void); void homer(void); void marge(unsigned int *); int counter; cond_t counter_cond; mutex_t counter_lock; unsigned int parameter=0x10203040; int main(int argc, char ** argv) { int tid_main=lwt_create((void *)main,0x4000,NULL); int tid_bart=lwt_create(bart,0x1000,NULL); int tid_lisa=lwt_create(lisa,0x1000,NULL); int tid_maggie=lwt_create(maggie,0x1000,NULL); int tid_homer=lwt_create(homer,0x1000,NULL); int tid_marge=lwt_create(marge,0x1000,¶meter); int c; puts("main(): beginning..."); lwt_conditioninit(&counter_cond); lwt_mutexinit(&counter_lock); lwt_dispatcher(RR_TS,100); for(c=0;c<0x10;c++) { lwt_schedule(); } lwt_kill(tid_bart); lwt_kill(tid_lisa); lwt_kill(tid_maggie); lwt_kill(tid_homer); lwt_kill(tid_marge); lwt_kill(tid_main); puts("main(): ending..."); return 0; } void delay(int arg) { int a; for(a=0;atid = %d\n", counter,current->tid); } } void lisa(void) { puts("lisa(): beginning..."); for(;;) { lwt_mutexlock(&counter_lock); counter++; #if 1 lwt_conditionwait(&counter_cond,&counter_lock); #endif lwt_mutexunlock(&counter_lock); printf("lisa(): counter = %d current->tid = %d\n", counter,current->tid); } } void maggie(void) { puts("maggie(): beginning..."); for(;;) { lwt_mutexlock(&counter_lock); counter++; #if 1 lwt_conditionwait(&counter_cond,&counter_lock); #endif lwt_mutexunlock(&counter_lock); printf("maggie(): counter = %d current->tid = %d\n", counter,current->tid); } } void homer(void) { puts("homer(): beginning..."); for(;;) { lwt_mutexlock(&counter_lock); counter++; #if 0 lwt_conditionwait(&counter_cond,&counter_lock); #endif lwt_mutexunlock(&counter_lock); printf("homer(): counter = %d current->tid = %d\n", counter,current->tid); } } void marge(unsigned int * arg) { for(;;) { printf("marge(): *arg = 0x%08x\n",*arg); (*arg)++; #if 1 if (*arg>0x10203800) { puts("I'M DONE! I'M DONE! I'M DONE! I'M DONE!"); return; } #endif } }