Ignore:
Timestamp:
Feb 9, 2017, 10:13:07 PM (8 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
aa9ee19, fb7dca0
Parents:
6ef2d81 (diff), 132fad4 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg2:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/kernel

    r6ef2d81 r992b089  
    3030struct cluster {
    3131        simple_thread_list ready_queue;
    32         pthread_spinlock_t lock;
     32        // pthread_spinlock_t lock;
    3333};
    3434
     
    3838//-----------------------------------------------------------------------------
    3939// Processor
     40enum ProcessorAction {
     41        Reschedule,
     42        NoAction
     43};
     44
    4045struct processor {
    41         struct processorCtx_t * ctx;
     46        struct processorCtx_t * runner;
    4247        cluster * cltr;
    4348        coroutine * current_coroutine;
     
    4651        simple_lock lock;
    4752        volatile bool terminated;
     53        ProcessorAction thread_action;
    4854};
    4955
     
    6268void unlock( simple_lock * );
    6369
    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 // }
    100 
    10170#endif //KERNEL_H
    10271
Note: See TracChangeset for help on using the changeset viewer.