Sleeping Wombat Common Library  0.50.0
swCommonLibrary
SpinLockedQueue.h
1 #pragma once
2 
3 #include "SpinLock.h"
4 
5 #include <queue>
6 #include <mutex> // std::lock_guard
7 
8 
10 template< typename ContentType >
12 {
13 private:
14 
15  std::queue< ContentType > m_queue;
16  SpinLock m_accesslock;
17 
18 public:
19 
20  void Push ( const ContentType& element );
21  bool TryPop ( ContentType& element );
22 
23  bool IsEmpty ();
24 
25 };
26 
28 template< typename ContentType >
29 inline void SpinLockedQueue< ContentType >::Push ( const ContentType& element )
30 {
31  std::lock_guard< SpinLock > guard( m_accesslock );
32  m_queue.push( element );
33 }
34 
38 template< typename ContentType >
39 inline bool SpinLockedQueue< ContentType >::TryPop ( ContentType & element )
40 {
41  std::lock_guard< SpinLock > guard( m_accesslock );
42 
43  if( m_queue.empty() )
44  return false;
45 
46  element = m_queue.front();
47  m_queue.pop();
48  return true;
49 }
50 
54 template< typename ContentType >
56 {
57  std::lock_guard< SpinLock > guard( m_accesslock );
58  return m_queue.empty();
59 }
Klasa służąca jako mutex z aktywnym oczekiwaniem.
Definition: SpinLock.h:27
Kolejka z mechanizmami synchronizacji opartymi o SpinLocka.
Definition: SpinLockedQueue.h:11
bool IsEmpty()
Zwraca true, jeżeli kolejka jest pusta. Należy pamiętać, że po wywołaniu tej funkcji kolejka może zos...
Definition: SpinLockedQueue.h:55
bool TryPop(ContentType &element)
Zwraca element w parametrze.
Definition: SpinLockedQueue.h:39