Initially Locked Priority Ceiling Semaphores
Gedare Bloom
gedare at rtems.org
Wed May 21 15:01:59 UTC 2014
On Wed, May 21, 2014 at 10:41 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> Hello,
>
> you can create a Classic API semaphore using the Priority Ceiling Protocol
> which is initially locked by the creating task. In this case the creating
> task is not elevated to the ceiling priority:
>
> CORE_mutex_Status _CORE_mutex_Initialize(
> CORE_mutex_Control *the_mutex,
> Thread_Control *executing,
> const CORE_mutex_Attributes *the_mutex_attributes,
> bool initially_locked
> )
> {
>
> /* Add this to the RTEMS environment later ?????????
> rtems_assert( initial_lock == CORE_MUTEX_LOCKED ||
> initial_lock == CORE_MUTEX_UNLOCKED );
> */
>
> the_mutex->Attributes = *the_mutex_attributes;
>
> if ( initially_locked ) {
> the_mutex->nest_count = 1;
> the_mutex->holder = executing;
> if ( _CORE_mutex_Is_inherit_priority( &the_mutex->Attributes ) ||
> _CORE_mutex_Is_priority_ceiling( &the_mutex->Attributes ) ) {
>
> if ( executing->current_priority <
> the_mutex->Attributes.priority_ceiling )
> return CORE_MUTEX_STATUS_CEILING_VIOLATED;
Looks like this check ensures the executing thread has got priority at
least at the priority_ceiling. If it does not, the mutex is not
initialized.
-Gedare
>
> Is this working as intended?
>
> --
> Sebastian Huber, embedded brains GmbH
>
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone : +49 89 189 47 41-16
> Fax : +49 89 189 47 41-09
> E-Mail : sebastian.huber at embedded-brains.de
> PGP : Public key available on request.
>
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
> _______________________________________________
> rtems-devel mailing list
> rtems-devel at rtems.org
> http://www.rtems.org/mailman/listinfo/rtems-devel
More information about the devel
mailing list