Ignore:
Timestamp:
Nov 17, 2021, 11:17:59 AM (10 months ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
Children:
84a6e70
Parents:
1387ea0
Message:

Mark idle now uses try_lock semantics

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel.cfa

    r1387ea0 r5f5a729  
    124124static void __wake_one(cluster * cltr);
    125125
    126 static void mark_idle (__cluster_proc_list & idles, processor & proc);
     126static bool mark_idle (__cluster_proc_list & idles, processor & proc);
    127127static void mark_awake(__cluster_proc_list & idles, processor & proc);
    128128static [unsigned idle, unsigned total, * processor] query_idles( & __cluster_proc_list idles );
     
    213213
    214214                                // Push self to idle stack
    215                                 mark_idle(this->cltr->procs, * this);
     215                                if(!mark_idle(this->cltr->procs, * this)) continue MAIN_LOOP;
    216216
    217217                                // Confirm the ready-queue is empty
     
    331331                                // Push self to idle stack
    332332                                ready_schedule_unlock();
    333                                 mark_idle(this->cltr->procs, * this);
     333                                if(!mark_idle(this->cltr->procs, * this)) goto SEARCH;
    334334                                ready_schedule_lock();
    335335
     
    806806}
    807807
    808 static void mark_idle(__cluster_proc_list & this, processor & proc) {
    809         /* paranoid */ verify( ! __preemption_enabled() );
    810         lock( this );
     808static bool mark_idle(__cluster_proc_list & this, processor & proc) {
     809        /* paranoid */ verify( ! __preemption_enabled() );
     810        if(!try_lock( this )) return false;
    811811                this.idle++;
    812812                /* paranoid */ verify( this.idle <= this.total );
     
    815815        unlock( this );
    816816        /* paranoid */ verify( ! __preemption_enabled() );
     817
     818        return true;
    817819}
    818820
Note: See TracChangeset for help on using the changeset viewer.