Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/kernel

    r9e45e46 re15df4c  
    3030struct cluster {
    3131        simple_thread_list ready_queue;
    32         // pthread_spinlock_t lock;
     32        pthread_spinlock_t lock;
    3333};
    3434
     
    3838//-----------------------------------------------------------------------------
    3939// Processor
    40 enum ProcessorAction {
    41         Reschedule,
    42         NoAction
    43 };
    44 
    4540struct processor {
    46         struct processorCtx_t * runner;
     41        struct processorCtx_t * ctx;
    4742        cluster * cltr;
    4843        coroutine * current_coroutine;
     
    5146        simple_lock lock;
    5247        volatile bool terminated;
    53         ProcessorAction thread_action;
    5448};
    5549
     
    6862void unlock( simple_lock * );
    6963
     64struct pthread_spinlock_guard {
     65        pthread_spinlock_t * lock;
     66};
     67
     68static inline void ?{}( pthread_spinlock_guard * this, pthread_spinlock_t * lock ) {
     69        this->lock = lock;
     70        pthread_spin_lock( this->lock );
     71}
     72
     73static 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// }
     100
    70101#endif //KERNEL_H
    71102
Note: See TracChangeset for help on using the changeset viewer.