Changes in src/libcfa/concurrency/kernel [e15df4c:c84e80a]
- File:
- 
      - 1 edited
 
 - 
          
  src/libcfa/concurrency/kernel (modified) (1 diff)
 
Legend:
- Unmodified
- Added
- Removed
- 
      src/libcfa/concurrency/kernelre15df4c rc84e80a 20 20 #include <stdbool.h> 21 21 22 #include "invoke.h"23 24 extern "C" {25 #include <pthread.h>26 }27 28 //-----------------------------------------------------------------------------29 // Cluster30 struct cluster {31 simple_thread_list ready_queue;32 pthread_spinlock_t lock;33 };34 35 void ?{}(cluster * this);36 void ^?{}(cluster * this);37 38 //-----------------------------------------------------------------------------39 // Processor40 22 struct processor { 41 struct processorCtx_t * ctx; 42 cluster * cltr; 43 coroutine * current_coroutine; 44 thread * current_thread; 45 pthread_t kernel_thread; 46 simple_lock lock; 47 volatile bool terminated; 23 struct proc_coroutine * cor; 24 unsigned int thread_index; 25 unsigned int thread_count; 26 struct thread_h * threads[10]; 27 bool terminated; 48 28 }; 49 29 50 30 void ?{}(processor * this); 51 void ?{}(processor * this, cluster * cltr);52 31 void ^?{}(processor * this); 53 32 54 55 //----------------------------------------------------------------------------- 56 // Locks 57 58 void ?{}(simple_lock * this); 59 void ^?{}(simple_lock * this); 60 61 void lock( simple_lock * ); 62 void unlock( simple_lock * ); 63 64 struct pthread_spinlock_guard { 65 pthread_spinlock_t * lock; 66 }; 67 68 static inline void ?{}( pthread_spinlock_guard * this, pthread_spinlock_t * lock ) { 69 this->lock = lock; 70 pthread_spin_lock( this->lock ); 71 } 72 73 static inline void ^?{}( pthread_spinlock_guard * this ) { 74 pthread_spin_unlock( this->lock ); 75 } 76 77 // //Simple spinlock implementation from 78 // //http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal 79 // //Not optimal but correct 80 // #define VOL 81 82 // struct simple_spinlock { 83 // VOL int lock; 84 // }; 85 86 // extern VOL int __sync_lock_test_and_set( VOL int *, VOL int); 87 // extern void __sync_synchronize(); 88 89 // static inline void lock( simple_spinlock * this ) { 90 // while (__sync_lock_test_and_set(&this->lock, 1)) { 91 // // Do nothing. This GCC builtin instruction 92 // // ensures memory barrier. 93 // } 94 // } 95 96 // static inline void unlock( simple_spinlock * this ) { 97 // __sync_synchronize(); // Memory barrier. 98 // this->lock = 0; 99 // } 33 void scheduler_add( struct thread_h * thrd ); 34 void scheduler_remove( struct thread_h * thrd ); 35 void kernel_run( void ); 100 36 101 37 #endif //KERNEL_H 
  Note:
 See   TracChangeset
 for help on using the changeset viewer.
  