Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/kernel

    re60e0dc rc81ebf9  
    2828//-----------------------------------------------------------------------------
    2929// Locks
    30 void lock      ( spinlock * DEBUG_CTX_PARAM2 );       // Lock the spinlock, spin if already acquired
    31 void lock_yield( spinlock * DEBUG_CTX_PARAM2 );       // Lock the spinlock, yield repeatedly if already acquired
    32 bool try_lock  ( spinlock * DEBUG_CTX_PARAM2 );       // Lock the spinlock, return false if already acquired
    33 void unlock    ( spinlock * );                        // Unlock the spinlock
     30bool try_lock( spinlock * );
     31void lock( spinlock * );
     32void unlock( spinlock * );
    3433
    35 struct semaphore {
    36         spinlock lock;
    37         int count;
    38         __thread_queue_t waiting;
     34struct signal_once {
     35        volatile bool cond;
     36        struct spinlock lock;
     37        struct __thread_queue_t blocked;
    3938};
    4039
    41 void  ?{}(semaphore * this, int count = 1);
    42 void ^?{}(semaphore * this);
    43 void P(semaphore * this);
    44 void V(semaphore * this);
     40void ?{}(signal_once * this);
     41void ^?{}(signal_once * this);
    4542
     43void wait( signal_once * );
     44void signal( signal_once * );
    4645
    4746//-----------------------------------------------------------------------------
    4847// Cluster
    4948struct cluster {
    50         spinlock ready_queue_lock;                      // Ready queue locks
    51         __thread_queue_t ready_queue;                   // Ready queue for threads
    52         unsigned long long int preemption;              // Preemption rate on this cluster
     49        __thread_queue_t ready_queue;
     50        spinlock lock;
    5351};
    5452
     
    7068        unsigned short thrd_count;
    7169};
    72 static inline void ?{}(FinishAction * this) {
     70static inline void ?{}(FinishAction * this) { 
    7371        this->action_code = No_Action;
    7472        this->thrd = NULL;
     
    7775static inline void ^?{}(FinishAction * this) {}
    7876
    79 // Processor
    80 // Wrapper around kernel threads
    8177struct processor {
    82         // Main state
    83         struct processorCtx_t * runner;                 // Coroutine ctx who does keeps the state of the processor
    84         cluster * cltr;                                 // Cluster from which to get threads
    85         pthread_t kernel_thread;                        // Handle to pthreads
     78        struct processorCtx_t * runner;
     79        cluster * cltr;
     80        coroutine_desc * current_coroutine;
     81        thread_desc * current_thread;
     82        pthread_t kernel_thread;
     83       
     84        signal_once terminated;
     85        volatile bool is_terminated;
    8686
    87         // Termination
    88         volatile bool do_terminate;                     // Set to true to notify the processor should terminate
    89         semaphore terminated;                           // Termination synchronisation
     87        struct FinishAction finish;
    9088
    91         // RunThread data
    92         struct FinishAction finish;                     // Action to do after a thread is ran
     89        struct alarm_node_t * preemption_alarm;
     90        unsigned int preemption;
    9391
    94         // Preemption data
    95         struct alarm_node_t * preemption_alarm;         // Node which is added in the discrete event simulaiton
    96         bool pending_preemption;                        // If true, a preemption was triggered in an unsafe region, the processor must preempt as soon as possible
     92        unsigned short disable_preempt_count;
    9793
    98 #ifdef __CFA_DEBUG__
    99         char * last_enable;                             // Last function to enable preemption on this processor
    100 #endif
     94        bool pending_preemption;
    10195};
    10296
Note: See TracChangeset for help on using the changeset viewer.