Quantcast
Channel: A concurrency-safe stack structure - Code Review Stack Exchange
Viewing all articles
Browse latest Browse all 3

A concurrency-safe stack structure

$
0
0

This is a teaching sample intended to illustrate use of mutability and list consing in F#. The structure is intended to be a thread-safe stack structure, which multiple threads can push to/pop from concurrently. Concerns:

  • Will this actually be thread safe?
  • Are the locks necessary?
  • Is there an immutable way to do the same thing? I don't think one can use the traditional immutable method here of having the Push/Pop return a new stack instance because different clients will see divergent views of the stack.

The code looks like this:

type ConcurrentStack<'T>() =        let mutable _stack : List<'T> = []    member this.Push value =      lock _stack (fun () ->          _stack <- value :: _stack)    member this.TryPop() =      lock _stack (fun () ->         match _stack with         | result :: newStack ->            _stack <- newStack            result |> Some         | [] -> None      )

Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images