Changeset eb2e723 for src/examples
- Timestamp:
- Jan 19, 2017, 2:42:49 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 35dd180f
- Parents:
- 2175062
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/examples/thread.c
r2175062 reb2e723 1 #include <kernel>1 // #include <kernel> 2 2 #include <stdlib> 3 3 #include <threads> 4 4 5 // Start coroutine routines6 extern "C" {7 forall(dtype T | is_coroutine(T))8 void CtxInvokeCoroutine(T * this);5 // // Start coroutine routines 6 // extern "C" { 7 // forall(dtype T | is_coroutine(T)) 8 // void CtxInvokeCoroutine(T * this); 9 9 10 forall(dtype T | is_coroutine(T))11 void CtxStart(T * this, void ( *invoke)(T *));10 // forall(dtype T | is_coroutine(T)) 11 // void CtxStart(T * this, void ( *invoke)(T *)); 12 12 13 forall(dtype T | is_coroutine(T))14 void CtxInvokeThread(T * this);15 }13 // forall(dtype T | is_coroutine(T)) 14 // void CtxInvokeThread(T * this); 15 // } 16 16 17 struct MyThread {18 thread_h t;19 unsigned id;20 unsigned count;21 };17 // struct MyThread { 18 // thread_h t; 19 // unsigned id; 20 // unsigned count; 21 // }; 22 22 23 void ?{}( MyThread * this ) {24 this->id = 0;25 this->count = 10;26 }23 // void ?{}( MyThread * this ) { 24 // this->id = 0; 25 // this->count = 10; 26 // } 27 27 28 void ?{}( MyThread * this, unsigned id, unsigned count ) {29 this->id = id;30 this->count = count;31 }28 // void ?{}( MyThread * this, unsigned id, unsigned count ) { 29 // this->id = id; 30 // this->count = count; 31 // } 32 32 33 void ^?{}( MyThread * this ) {}33 // void ^?{}( MyThread * this ) {} 34 34 35 void main(MyThread* this) {36 printf("Main called with %p\n", this);37 printf("Thread %d : Suspending %d times\n", this->id, this->count);35 // void main(MyThread* this) { 36 // printf("Main called with %p\n", this); 37 // printf("Thread %d : Suspending %d times\n", this->id, this->count); 38 38 39 for(int i = 0; i < this->count; i++) {40 printf("Thread %d : Suspend No. %d\n", this->id, i + 1);41 printf("Back to %p\n", &this->t.c);42 suspend();43 }44 }39 // for(int i = 0; i < this->count; i++) { 40 // printf("Thread %d : Suspend No. %d\n", this->id, i + 1); 41 // printf("Back to %p\n", &this->t.c); 42 // suspend(); 43 // } 44 // } 45 45 46 thread_h* get_thread(MyThread* this) {47 return &this->t;48 }46 // thread_h* get_thread(MyThread* this) { 47 // return &this->t; 48 // } 49 49 50 coroutine* get_coroutine(MyThread* this) {51 return &this->t.c;52 }50 // coroutine* get_coroutine(MyThread* this) { 51 // return &this->t.c; 52 // } 53 53 54 54 int main() { 55 printf("Main is %p\n", this_coroutine()); 55 56 56 thread(MyThread) thread1;57 thread(MyThread) thread2;57 // thread(MyThread) thread1; 58 // thread(MyThread) thread2; 58 59 59 thread2.handle.id = 1;60 // thread2.handle.id = 1; 60 61 61 printf("\n\nMain is %p\n", this_coroutine());62 62 63 kernel_run();63 // // kernel_run(); 64 64 65 printf("Kernel terminated correctly\n");65 // printf("Kernel terminated correctly\n"); 66 66 67 67 return 0;
Note: See TracChangeset
for help on using the changeset viewer.