Changes in src/libcfa/concurrency/threads [5c81105:78b3f52]
- File:
-
- 1 edited
-
src/libcfa/concurrency/threads (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/concurrency/threads
r5c81105 r78b3f52 18 18 #define __THREADS_H__ 19 19 20 #include "invoke.h" 20 #include <stdbool.h> 21 22 extern "C" { 23 struct coVtable { 24 void (*main)(void*); 25 struct coroutine* (*this_coroutine)(void*); 26 }; 27 28 struct coStack_t { 29 unsigned int size; // size of stack 30 void *storage; // pointer to stack 31 void *limit; // stack grows towards stack limit 32 void *base; // base of stack 33 void *context; // address of cfa_context_t 34 void *top; // address of top of storage 35 bool userStack; 36 }; 37 38 39 enum coroutine_state { Start, Inactive, Active, Halt }; 40 41 struct coroutine { 42 coStack_t stack; 43 const char *name; // textual name for coroutine/task, initialized by uC++ generated code 44 int errno_; // copy of global UNIX variable errno 45 coroutine_state state; // current execution status for coroutine 46 bool notHalted; // indicate if execuation state is not halted 47 48 coroutine *starter; // first coroutine to resume this one 49 coroutine *last; // last coroutine to resume this one 50 }; 51 } 21 52 22 53 void ?{}(coStack_t* this); 23 54 24 55 void ?{}(coroutine* this); 25 void ?{}(coroutine* this, covptr_t* object);26 56 27 57 trait coroutine_t(dtype T) { 58 coroutine* this_coroutine(T* this); 28 59 void co_main(T* this); 29 co vptr_t* vtable(T* this);60 coVtable* vtable(T* this); 30 61 }; 62 63 forall(dtype T | coroutine_t(T)) 64 void start(T* cor); 31 65 32 66 void suspend(void);
Note:
See TracChangeset
for help on using the changeset viewer.