Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
internal::reservable_predecessor_cache< T, M > Class Template Reference

An cache of predecessors that supports requests and reservations. More...

#include <_flow_graph_cache_impl.h>

Inheritance diagram for internal::reservable_predecessor_cache< T, M >:
Collaboration diagram for internal::reservable_predecessor_cache< T, M >:

Public Types

typedef M mutex_type
 
typedef T output_type
 
typedef sender< T > predecessor_type
 
typedef receiver< T > successor_type
 
- Public Types inherited from internal::predecessor_cache< T, M >
typedef M mutex_type
 
typedef T output_type
 
typedef sender< output_typepredecessor_type
 
typedef receiver< output_typesuccessor_type
 
- Public Types inherited from internal::node_cache< T, M >
typedef size_t size_type
 

Public Member Functions

 reservable_predecessor_cache ()
 
bool try_reserve (output_type &v)
 
bool try_release ()
 
bool try_consume ()
 
void reset ()
 
void clear ()
 
- Public Member Functions inherited from internal::predecessor_cache< T, M >
 predecessor_cache ()
 
void set_owner (successor_type *owner)
 
bool get_item (output_type &v)
 
void reset ()
 
- Public Member Functions inherited from internal::node_cache< T, M >
bool empty ()
 
void add (T &n)
 
void remove (T &n)
 
void clear ()
 

Private Attributes

predecessor_typereserved_src
 

Additional Inherited Members

- Protected Types inherited from internal::node_cache< T, M >
typedef M mutex_type
 
- Protected Member Functions inherited from internal::node_cache< T, M >
bool internal_empty ()
 
size_type internal_size ()
 
void internal_push (T &n)
 
T & internal_pop ()
 
- Protected Attributes inherited from internal::predecessor_cache< T, M >
successor_typemy_owner
 
- Protected Attributes inherited from internal::node_cache< T, M >
mutex_type my_mutex
 
std::queue< T * > my_q
 

Detailed Description

template<typename T, typename M = spin_mutex>
class internal::reservable_predecessor_cache< T, M >

An cache of predecessors that supports requests and reservations.

Definition at line 201 of file _flow_graph_cache_impl.h.

Member Typedef Documentation

◆ mutex_type

template<typename T, typename M = spin_mutex>
typedef M internal::reservable_predecessor_cache< T, M >::mutex_type

Definition at line 203 of file _flow_graph_cache_impl.h.

◆ output_type

template<typename T, typename M = spin_mutex>
typedef T internal::reservable_predecessor_cache< T, M >::output_type

Definition at line 204 of file _flow_graph_cache_impl.h.

◆ predecessor_type

template<typename T, typename M = spin_mutex>
typedef sender<T> internal::reservable_predecessor_cache< T, M >::predecessor_type

Definition at line 209 of file _flow_graph_cache_impl.h.

◆ successor_type

template<typename T, typename M = spin_mutex>
typedef receiver<T> internal::reservable_predecessor_cache< T, M >::successor_type

Definition at line 210 of file _flow_graph_cache_impl.h.

Constructor & Destructor Documentation

◆ reservable_predecessor_cache()

template<typename T, typename M = spin_mutex>
internal::reservable_predecessor_cache< T, M >::reservable_predecessor_cache ( )
inline

Definition at line 213 of file _flow_graph_cache_impl.h.

213 : reserved_src(NULL) { }

Member Function Documentation

◆ clear()

template<typename T, typename M = spin_mutex>
void internal::reservable_predecessor_cache< T, M >::clear ( )
inline

Definition at line 264 of file _flow_graph_cache_impl.h.

Referenced by internal::reserving_port< T >::reset_receiver().

Here is the caller graph for this function:

◆ reset()

template<typename T, typename M = spin_mutex>
void internal::reservable_predecessor_cache< T, M >::reset ( )
inline

Definition at line 259 of file _flow_graph_cache_impl.h.

Referenced by internal::reserving_port< T >::reset_receiver().

Here is the caller graph for this function:

◆ try_consume()

template<typename T, typename M = spin_mutex>
bool internal::reservable_predecessor_cache< T, M >::try_consume ( )
inline

Definition at line 253 of file _flow_graph_cache_impl.h.

253  {
254  reserved_src->try_consume( );
255  reserved_src = NULL;
256  return true;
257  }

Referenced by internal::reserving_port< T >::handle_operations().

Here is the caller graph for this function:

◆ try_release()

template<typename T, typename M = spin_mutex>
bool internal::reservable_predecessor_cache< T, M >::try_release ( )
inline

Definition at line 246 of file _flow_graph_cache_impl.h.

246  {
247  reserved_src->try_release( );
248  reserved_src = NULL;
249  return true;
250  }

Referenced by internal::reserving_port< T >::handle_operations().

Here is the caller graph for this function:

◆ try_reserve()

template<typename T, typename M = spin_mutex>
bool internal::reservable_predecessor_cache< T, M >::try_reserve ( output_type v)
inline

Definition at line 216 of file _flow_graph_cache_impl.h.

216  {
217  bool msg = false;
218 
219  do {
220  {
221  typename mutex_type::scoped_lock lock(this->my_mutex);
222  if ( reserved_src || this->internal_empty() )
223  return false;
224 
225  reserved_src = &this->internal_pop();
226  }
227 
228  // Try to get from this sender
229  msg = reserved_src->try_reserve( v );
230 
231  if (msg == false) {
232  typename mutex_type::scoped_lock lock(this->my_mutex);
233  // Relinquish ownership of the edge
234  reserved_src->register_successor( *this->my_owner );
235  reserved_src = NULL;
236  } else {
237  // Retain ownership of the edge
238  this->add( *reserved_src );
239  }
240  } while ( msg == false );
241 
242  return msg;
243  }
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void * lock

Referenced by internal::reserving_port< T >::handle_operations().

Here is the caller graph for this function:

Member Data Documentation

◆ reserved_src

template<typename T, typename M = spin_mutex>
predecessor_type* internal::reservable_predecessor_cache< T, M >::reserved_src
private

Definition at line 270 of file _flow_graph_cache_impl.h.


The documentation for this class was generated from the following file:

Copyright © 2005-2019 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.