Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/kernel

    re15df4c rc84e80a  
    2020#include <stdbool.h>
    2121
    22 #include "invoke.h"
    23 
    24 extern "C" {
    25 #include <pthread.h>
    26 }
    27 
    28 //-----------------------------------------------------------------------------
    29 // Cluster
    30 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 // Processor
    4022struct 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;
    4828};
    4929
    5030void ?{}(processor * this);
    51 void ?{}(processor * this, cluster * cltr);
    5231void ^?{}(processor * this);
    5332
    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 // }
     33void scheduler_add( struct thread_h * thrd );
     34void scheduler_remove( struct thread_h * thrd );
     35void kernel_run( void );
    10036
    10137#endif //KERNEL_H
Note: See TracChangeset for help on using the changeset viewer.