RTEMS
corebarrierwait.c
Go to the documentation of this file.
1 
8 /*
9  * COPYRIGHT (c) 1989-2006.
10  * On-Line Applications Research Corporation (OAR).
11  *
12  * The license and distribution terms for this file may be
13  * found in the file LICENSE in this distribution or at
14  * http://www.rtems.org/license/LICENSE.
15  */
16 
17 #ifdef HAVE_CONFIG_H
18 #include "config.h"
19 #endif
20 
22 #include <rtems/score/statesimpl.h>
23 #include <rtems/score/threadimpl.h>
24 
25 Status_Control _CORE_barrier_Seize(
26  CORE_barrier_Control *the_barrier,
27  Thread_Control *executing,
28  bool wait,
29  Thread_queue_Context *queue_context
30 )
31 {
32  uint32_t number_of_waiting_threads;
33 
34  _CORE_barrier_Acquire_critical( the_barrier, queue_context );
35 
36  number_of_waiting_threads = the_barrier->number_of_waiting_threads;
37  ++number_of_waiting_threads;
38 
39  if (
40  _CORE_barrier_Is_automatic( &the_barrier->Attributes )
41  && number_of_waiting_threads == the_barrier->Attributes.maximum_count
42  ) {
43  _CORE_barrier_Surrender( the_barrier, queue_context );
44  return STATUS_BARRIER_AUTOMATICALLY_RELEASED;
45  } else {
46  the_barrier->number_of_waiting_threads = number_of_waiting_threads;
48  queue_context,
50  );
52  &the_barrier->Wait_queue.Queue,
53  CORE_BARRIER_TQ_OPERATIONS,
54  executing,
55  queue_context
56  );
57  return _Thread_Wait_get_status( executing );
58  }
59 }
static __inline__ uint32_t _CORE_barrier_Surrender(CORE_barrier_Control *the_barrier, Thread_queue_Context *queue_context)
Manually releases the barrier.
#define STATES_WAITING_FOR_BARRIER
Definition: statesimpl.h:84
Thread queue context for the thread queue methods.
Definition: threadq.h:198
Inlined Routines Associated with the SuperCore Barrier.
Status_Control _CORE_barrier_Seize(CORE_barrier_Control *the_barrier, Thread_Control *executing, bool wait, Thread_queue_Context *queue_context)
Waits for the barrier.
Thread_queue_Queue Queue
The actual thread queue.
Definition: threadq.h:583
static __inline__ void _Thread_queue_Context_set_thread_state(Thread_queue_Context *queue_context, States_Control thread_state)
Sets the thread state for the thread to enqueue in the thread queue context.
Definition: threadqimpl.h:178
CORE_barrier_Attributes Attributes
Definition: corebarrier.h:83
Thread_queue_Control Wait_queue
Definition: corebarrier.h:79
static __inline__ void _CORE_barrier_Acquire_critical(CORE_barrier_Control *the_barrier, Thread_queue_Context *queue_context)
Acquires critical core barrier.
uint32_t number_of_waiting_threads
Definition: corebarrier.h:86
Inlined Routines Associated with Thread State Information.
Inlined Routines from the Thread Handler.
static __inline__ Status_Control _Thread_Wait_get_status(const Thread_Control *the_thread)
Get the status of the wait return code of the thread.
Definition: threadimpl.h:2354
void _Thread_queue_Enqueue(Thread_queue_Queue *queue, const Thread_queue_Operations *operations, Thread_Control *the_thread, Thread_queue_Context *queue_context)
Blocks the thread and places it on the thread queue.
static __inline__ bool _CORE_barrier_Is_automatic(CORE_barrier_Attributes *the_attribute)
Checks if the barrier is automatic.