- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/cofor.hfa
re4c3819 ree9ad40 5 5 typedef void (*__cofor_body_t)( ssize_t ); 6 6 7 void cofor( ssize_t low, ssize_t high, __cofor_body_t loop_body );7 void __Cofor__( ssize_t low, ssize_t high, __cofor_body_t loop_body ); 8 8 9 9 #define COFOR( lidname, low, high, loopbody ) \ … … 12 12 loopbody \ 13 13 } \ 14 cofor( low, high, __CFA_loopLambda__ ); \14 __Cofor__( low, high, __CFA_loopLambda__ ); \ 15 15 } 16 16 17 17 ////////////////////////////////////////////////////////////////////////////////////////// 18 // parallel (COBEGIN/COEND) 19 typedef void (*parallel_stmt_t)( void * ); 18 // corun 20 19 21 void parallel( parallel_stmt_t * stmts, void ** args, size_t num ); 20 // 21 typedef void (*__CFA_corun_lambda_t)( void ); 22 23 // used to run a corun statement in parallel 24 thread co_runner { 25 __CFA_corun_lambda_t body; 26 }; 27 28 // wraps a co_runner to provide RAII deallocation 29 struct runner_block { 30 co_runner * runner; 31 }; 32 static inline void ?{}( co_runner & this, __CFA_corun_lambda_t body ) { this.body = body; } 33 34 void main( co_runner & this ) with( this ) { body(); } 35 36 static inline void ?{}( runner_block & this ) {} 37 static inline void ?{}( runner_block & this, __CFA_corun_lambda_t body ) { 38 (*(this.runner = malloc())){ body }; 39 } 40 41 static inline void ^?{}( runner_block & this ) { 42 delete( this.runner ); 43 } 44
Note:
See TracChangeset
for help on using the changeset viewer.