1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef V8_UNBOUND_QUEUE_
6 #define V8_UNBOUND_QUEUE_
8 #include "allocation.h"
14 // Lock-free unbound queue for small records. Intended for
15 // transferring small records between a Single producer and a Single
16 // consumer. Doesn't have restrictions on the number of queued
17 // elements, so producer never blocks. Implemented after Herb
19 // http://www.ddj.com/high-performance-computing/210604448
20 template<typename Record>
21 class UnboundQueue BASE_EMBEDDED {
23 inline UnboundQueue();
24 inline ~UnboundQueue();
26 INLINE(bool Dequeue(Record* rec));
27 INLINE(void Enqueue(const Record& rec));
28 INLINE(bool IsEmpty() const);
29 INLINE(Record* Peek() const);
32 INLINE(void DeleteFirst());
37 AtomicWord divider_; // Node*
38 AtomicWord last_; // Node*
40 DISALLOW_COPY_AND_ASSIGN(UnboundQueue);
44 } } // namespace v8::internal
46 #endif // V8_UNBOUND_QUEUE_