Skip to content

Commit 08cbcf6

Browse files
committed
Simplify Treiber stack.
1 parent 0dcc62e commit 08cbcf6

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

src/treiber_stack.ml

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(** Treiber's Lock Free stack *)
22

3-
type 'a node = Nil | Next of 'a * 'a node Atomic.t
3+
type 'a node = Nil | Next of 'a * 'a node
44
type 'a t = { head : 'a node Atomic.t }
55

66
let create () =
@@ -11,8 +11,7 @@ let is_empty q = match Atomic.get q.head with Nil -> true | Next _ -> false
1111

1212
let push q v =
1313
let head = Atomic.get q.head in
14-
let next_node = Atomic.make head in
15-
let new_node = Next (v, next_node) in
14+
let new_node = Next (v, head) in
1615
if Atomic.compare_and_set q.head head new_node then ()
1716
else
1817
let b = Backoff.create () in
@@ -21,7 +20,7 @@ let push q v =
2120
(* retry *)
2221
let rec loop b =
2322
let head = Atomic.get q.head in
24-
Atomic.set next_node head;
23+
let new_node = Next (v, head) in
2524
if Atomic.compare_and_set q.head head new_node then ()
2625
else (
2726
Backoff.once b;
@@ -35,7 +34,7 @@ let pop q =
3534
match s with
3635
| Nil -> None
3736
| Next (v, next) ->
38-
if Atomic.compare_and_set q.head s (Atomic.get next) then Some v
37+
if Atomic.compare_and_set q.head s next then Some v
3938
else (
4039
Backoff.once b;
4140
loop b)
@@ -45,7 +44,7 @@ let pop q =
4544
match s with
4645
| Nil -> None
4746
| Next (v, next) ->
48-
if Atomic.compare_and_set q.head s (Atomic.get next) then Some v
47+
if Atomic.compare_and_set q.head s next then Some v
4948
else
5049
let b = Backoff.create () in
5150
Backoff.once b;

0 commit comments

Comments
 (0)