-
Notifications
You must be signed in to change notification settings - Fork 0
/
AsyncQueue.cpp
49 lines (36 loc) · 942 Bytes
/
AsyncQueue.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "AsyncQueue.h"
AsyncQueue* AsyncQueue_New(void) {
AsyncQueue* queue;
queue = Allocate(AsyncQueue);
AsyncQueue_Initialize(queue);
return queue;
}
void AsyncQueue_Initialize(AsyncQueue* queue) {
assert(queue != NULL);
queue->BaseQueue = Queue_New();
queue->Lock = SAL_Mutex_Create();
}
void AsyncQueue_Free(AsyncQueue* self) {
assert(self != NULL);
AsyncQueue_Uninitialize(self);
Free(self);
}
void AsyncQueue_Uninitialize(AsyncQueue* self) {
assert(self != NULL);
Queue_Free(self->BaseQueue);
SAL_Mutex_Free(self->Lock);
}
void* AsyncQueue_Dequeue(AsyncQueue* self) {
void* data;
assert(self != NULL);
SAL_Mutex_Acquire(self->Lock);
data = Queue_Dequeue(self->BaseQueue);
SAL_Mutex_Release(self->Lock);
return data;
}
void AsyncQueue_Enqueue(AsyncQueue* self, void* toEnqueue) {
assert(self != NULL);
SAL_Mutex_Acquire(self->Lock);
Queue_Dequeue(self->BaseQueue);
SAL_Mutex_Release(self->Lock);
}