aboutsummaryrefslogtreecommitdiff
path: root/src/rt/util/synchronized_indexed_list.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/util/synchronized_indexed_list.h')
-rw-r--r--src/rt/util/synchronized_indexed_list.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/rt/util/synchronized_indexed_list.h b/src/rt/util/synchronized_indexed_list.h
index ca02f6ef..a7f79a74 100644
--- a/src/rt/util/synchronized_indexed_list.h
+++ b/src/rt/util/synchronized_indexed_list.h
@@ -7,7 +7,14 @@ template<typename T> class synchronized_indexed_list :
public indexed_list<T> {
spin_lock _lock;
public:
- synchronized_indexed_list(memory_region &region) :
+ /**
+ * Clients can use this global lock that is associated with the list to
+ * perform more coarse grained locking. Internally, the synchronized list
+ * doesn'tactually make any use of this lock.
+ */
+ spin_lock global;
+
+ synchronized_indexed_list(memory_region *region) :
indexed_list<T>(region) {
// Nop.
}
@@ -20,6 +27,13 @@ public:
return index;
}
+ bool pop(T **value) {
+ _lock.lock();
+ bool result = indexed_list<T>::pop(value);
+ _lock.unlock();
+ return result;
+ }
+
size_t length() {
size_t length = 0;
_lock.lock();