MCPcopy Create free account
hub / github.com/apache/mesos / EventQueue

Class EventQueue

3rdparty/libprocess/src/event_queue.hpp:68–246  ·  view source on GitHub ↗

A _multiple_ producer (MP) _single_ consumer (SC) event queue for a process. Note that we don't _enforce_ the MP/SC semantics during runtime but we have explicitly separated out the `Producer` interface and the `Consumer` interface in order to help avoid incorrect usage. Notable semantics: Consumers _must_ call `empty()` before calling `dequeue()`. Failing to do so may result in undefined behavi

Source from the content-addressed store, hash-verified

66// into the actor model because there will only ever be a single
67// thread consuming an actors events at a time.
68class EventQueue
69{
70public:
71 EventQueue() : producer(this), consumer(this) {}
72
73 class Producer
74 {
75 public:
76 // Returns false if not enqueued; this means the queue
77 // is decomissioned. In this case the caller retains
78 // ownership of the event.
79 bool enqueue(Event* event) { return queue->enqueue(event); }
80
81 private:
82 friend class EventQueue;
83
84 Producer(EventQueue* queue) : queue(queue) {}
85
86 EventQueue* queue;
87 } producer;
88
89 class Consumer
90 {
91 public:
92 Event* dequeue() { return queue->dequeue(); }
93 bool empty() { return queue->empty(); }
94 void decomission() { queue->decomission(); }
95 template <typename T>
96 size_t count() { return queue->count<T>(); }
97 operator JSON::Array() { return queue->operator JSON::Array(); }
98
99 private:
100 friend class EventQueue;
101
102 Consumer(EventQueue* queue) : queue(queue) {}
103
104 EventQueue* queue;
105 } consumer;
106
107private:
108 friend class Producer;
109 friend class Consumer;
110
111#ifndef LOCK_FREE_EVENT_QUEUE
112 bool enqueue(Event* event)
113 {
114 synchronized (mutex) {
115 if (comissioned) {
116 events.push_back(event);
117 return true;
118 }
119 }
120
121 return false;
122 }
123
124 Event* dequeue()
125 {

Callers

nothing calls this directly

Calls 2

for_eachMethod · 0.80
ObjectClass · 0.50

Tested by

no test coverage detected