From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nick Garnett To: ecos-discuss@sourceware.cygnus.com Subject: Re: [ECOS] Unique priorities Date: Thu, 11 Jan 2001 09:15:00 -0000 Message-id: References: <3A5DE5C4.33B37AA0@redhat.com> X-SW-Source: 2001-01/msg00189.html Jonathan Larmour writes: > Jesper Skov wrote: > > > > >>>>> "Paleologos" == Paleologos Spanos writes: > > Paleologos> mlqueues default scheduler). I would expect that I would > > Paleologos> have an error or something like that because of the fact > > Paleologos> that the 2 threads are having the same priority (4).Is it > > Paleologos> correct or I have misunderstood something? > > > > The bitmap scheduler will assign a thread the closest possible > > priority to that requested. It does not fail if the requested priority > > is already used, it just returns another. So your threads would > > probably have priorities 4 and 5. > > Jesper are you sure about that? From bitmap.cxx > > void Cyg_Scheduler_Implementation::add_thread(Cyg_Thread *thread) > { > CYG_REPORT_FUNCTION(); > > CYG_ASSERT((CYG_THREAD_MIN_PRIORITY >= thread->priority) > && (CYG_THREAD_MAX_PRIORITY <= thread->priority), > "Priority out of range!"); > > CYG_ASSERT( thread_table[thread->priority] == NULL || > thread_table[thread->priority] == thread, > "Duplicate thread priorities" ); > Yes, here's the code: Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation ( CYG_ADDRWORD sched_info ) { CYG_REPORT_FUNCTION(); #if 1 // Assign this thread's priority to the supplied sched_info // or the next highest priority available. priority = cyg_priority(sched_info); while( !Cyg_Scheduler::scheduler.unique(priority) ) priority++; #else // Assign initial priorities to threads in descending order of // creation. static cyg_priority init_priority = 0; priority = init_priority++; #endif } -- Nick Garnett, eCos Kernel Architect Red Hat, Cambridge, UK