Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/libcfa/concurrency/kernel

    rde94a60 r0f56058  
    4040
    4141//-----------------------------------------------------------------------------
     42// Cluster
     43struct cluster {
     44        // Ready queue locks
     45        __spinlock_t ready_queue_lock;
     46
     47        // Ready queue for threads
     48        __queue_t(thread_desc) ready_queue;
     49
     50        // Preemption rate on this cluster
     51        Duration preemption_rate;
     52};
     53
     54extern Duration default_preemption();
     55
     56void ?{} (cluster & this);
     57void ^?{}(cluster & this);
     58
     59//-----------------------------------------------------------------------------
    4260// Processor
    43 extern struct cluster * mainCluster;
    44 
    4561enum FinishOpCode { No_Action, Release, Schedule, Release_Schedule, Release_Multi, Release_Multi_Schedule };
    4662
     
    7490
    7591        // Cluster from which to get threads
    76         struct cluster * cltr;
    77 
    78         // Name of the processor
    79         const char * name;
     92        cluster * cltr;
    8093
    8194        // Handle to pthreads
     
    100113        bool pending_preemption;
    101114
    102         // Idle lock
    103 
    104         // Link lists fields
    105         struct {
    106                 struct processor * next;
    107                 struct processor * prev;
    108         } node;
    109 
    110115#ifdef __CFA_DEBUG__
    111116        // Last function to enable preemption on this processor
     
    114119};
    115120
    116 void  ?{}(processor & this, const char * name, struct cluster & cltr);
     121void  ?{}(processor & this);
     122void  ?{}(processor & this, cluster * cltr);
    117123void ^?{}(processor & this);
    118 
    119 static inline void  ?{}(processor & this)                    { this{ "Anonymous Processor", *mainCluster}; }
    120 static inline void  ?{}(processor & this, struct cluster & cltr)    { this{ "Anonymous Processor", cltr}; }
    121 static inline void  ?{}(processor & this, const char * name) { this{name, *mainCluster }; }
    122 
    123 static inline [processor *&, processor *& ] __get( processor & this ) {
    124         return this.node.[next, prev];
    125 }
    126 
    127 //-----------------------------------------------------------------------------
    128 // Cluster
    129 struct cluster {
    130         // Ready queue locks
    131         __spinlock_t ready_queue_lock;
    132 
    133         // Ready queue for threads
    134         __queue_t(thread_desc) ready_queue;
    135 
    136         // Name of the cluster
    137         const char * name;
    138 
    139         // Preemption rate on this cluster
    140         Duration preemption_rate;
    141 
    142         // List of processors
    143         __spinlock_t proc_list_lock;
    144         __dllist_t(struct processor) procs;
    145         __dllist_t(struct processor) idles;
    146 
    147         // Link lists fields
    148         struct {
    149                 cluster * next;
    150                 cluster * prev;
    151         } node;
    152 };
    153 extern Duration default_preemption();
    154 
    155 void ?{} (cluster & this, const char * name, Duration preemption_rate);
    156 void ^?{}(cluster & this);
    157 
    158 static inline void ?{} (cluster & this)                           { this{"Anonymous Cluster", default_preemption()}; }
    159 static inline void ?{} (cluster & this, Duration preemption_rate) { this{"Anonymous Cluster", preemption_rate}; }
    160 static inline void ?{} (cluster & this, const char * name)        { this{name, default_preemption()}; }
    161 
    162 static inline [cluster *&, cluster *& ] __get( cluster & this ) {
    163         return this.node.[next, prev];
    164 }
    165124
    166125// Local Variables: //
Note: See TracChangeset for help on using the changeset viewer.