Skip to content

Commit cd86595

Browse files
committed
---
yaml --- r: 518 b: refs/heads/master c: 6e9f0f9 h: refs/heads/master v: v3
1 parent bca0d4f commit cd86595

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 028702a798988a86da3f5700a9a4daea01dbe0b0
2+
refs/heads/master: 6e9f0f952d758bae2b530c2c9b780f2addf10207

trunk/src/rt/sync/lock_free_queue.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,20 @@ lock_free_queue::lock_free_queue() : _tail(this) {
1818

1919
void
2020
lock_free_queue::enqueue(lock_free_queue_node *item) {
21+
lock.lock();
2122
item->next = (lock_free_queue_node *) NULL;
2223
lock_free_queue_node *last = _tail;
2324
_tail = item;
2425
while (last->next) {
2526
last = last->next;
2627
}
2728
last->next = item;
29+
lock.unlock();
2830
}
2931

3032
lock_free_queue_node *
3133
lock_free_queue::dequeue() {
34+
lock.lock();
3235
lock_free_queue_node *item = next;
3336
if (item && !(next = item->next)) {
3437
_tail = (lock_free_queue_node *) this;
@@ -41,6 +44,7 @@ lock_free_queue::dequeue() {
4144
} while ((lost = help) != (lock_free_queue_node *) NULL);
4245
}
4346
}
47+
lock.unlock();
4448
return item;
4549
}
4650

trunk/src/rt/sync/lock_free_queue.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
#ifndef LOCK_FREE_QUEUE_H
22
#define LOCK_FREE_QUEUE_H
33

4+
#include "spin_lock.h"
5+
46
class lock_free_queue_node {
57
public:
68
lock_free_queue_node *next;
79
lock_free_queue_node();
810
};
911

1012
class lock_free_queue : lock_free_queue_node {
13+
spin_lock lock;
1114
lock_free_queue_node *_tail;
1215
public:
1316
lock_free_queue();

0 commit comments

Comments
 (0)