diff options
Diffstat (limited to 'src/include/util/locked/queue.H')
| -rw-r--r-- | src/include/util/locked/queue.H | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/include/util/locked/queue.H b/src/include/util/locked/queue.H index 2f230819e..51d2c430e 100644 --- a/src/include/util/locked/queue.H +++ b/src/include/util/locked/queue.H @@ -1,6 +1,8 @@ #ifndef __UTIL_LOCKED_QUEUE_H #define __UTIL_LOCKED_QUEUE_H +#include <util/locked/lock.H> + namespace Util { namespace Locked @@ -21,6 +23,9 @@ namespace Util _S lock; + void __lock(); + void __unlock(); + }; template <typename _T, bool locked, typename _S> @@ -28,8 +33,7 @@ namespace Util { _T* item = NULL; - if (locked) - lock.lock(); + __lock(); if (tail != NULL) { @@ -40,17 +44,15 @@ namespace Util tail = item->prev; } - if (locked) - lock.unlock(); - + __unlock(); + return item; } template <typename _T, bool locked, typename _S> void Queue<_T,locked,_S>::insert(_T* item) { - if (locked) - lock.lock(); + __lock(); if (head == NULL) { @@ -63,10 +65,23 @@ namespace Util item->next = head; head = head->prev = item; } + + __unlock(); + } - if (locked) - lock.unlock(); + template <typename _T, bool locked, typename _S> + void Queue<_T,locked,_S>::__lock() + { + Util::Locked::LockHelper<locked,_S>(lock).lock(); + } + + template <typename _T, bool locked, typename _S> + void Queue<_T,locked,_S>::__unlock() + { + Util::Locked::LockHelper<locked,_S>(lock).unlock(); } + + }; }; |

