File tree Expand file tree Collapse file tree 3 files changed +8
-1
lines changed Expand file tree Collapse file tree 3 files changed +8
-1
lines changed Original file line number Diff line number Diff line change 1
1
---
2
- refs/heads/master: 028702a798988a86da3f5700a9a4daea01dbe0b0
2
+ refs/heads/master: 6e9f0f952d758bae2b530c2c9b780f2addf10207
Original file line number Diff line number Diff line change @@ -18,17 +18,20 @@ lock_free_queue::lock_free_queue() : _tail(this) {
18
18
19
19
void
20
20
lock_free_queue::enqueue (lock_free_queue_node *item) {
21
+ lock.lock ();
21
22
item->next = (lock_free_queue_node *) NULL ;
22
23
lock_free_queue_node *last = _tail;
23
24
_tail = item;
24
25
while (last->next ) {
25
26
last = last->next ;
26
27
}
27
28
last->next = item;
29
+ lock.unlock ();
28
30
}
29
31
30
32
lock_free_queue_node *
31
33
lock_free_queue::dequeue () {
34
+ lock.lock ();
32
35
lock_free_queue_node *item = next;
33
36
if (item && !(next = item->next )) {
34
37
_tail = (lock_free_queue_node *) this ;
@@ -41,6 +44,7 @@ lock_free_queue::dequeue() {
41
44
} while ((lost = help) != (lock_free_queue_node *) NULL );
42
45
}
43
46
}
47
+ lock.unlock ();
44
48
return item;
45
49
}
46
50
Original file line number Diff line number Diff line change 1
1
#ifndef LOCK_FREE_QUEUE_H
2
2
#define LOCK_FREE_QUEUE_H
3
3
4
+ #include " spin_lock.h"
5
+
4
6
class lock_free_queue_node {
5
7
public:
6
8
lock_free_queue_node *next;
7
9
lock_free_queue_node ();
8
10
};
9
11
10
12
class lock_free_queue : lock_free_queue_node {
13
+ spin_lock lock;
11
14
lock_free_queue_node *_tail;
12
15
public:
13
16
lock_free_queue ();
You can’t perform that action at this time.
0 commit comments