sync_primitives v0.2.0 SyncPrimitives.CountDownLatch View Source
A CountDownLatch expects count calls to count_down/2 before calls to
await/2 can continue.
A CountDownLatch is initialized with a count.
await/2 blocks until the current count reaches 0 due to invocations of the
count_down/2 method, after which all blocked processes are unblocked.
Any subsequent invocations of await/2 return immediately. This is a
one-shot phenomenon -- the count cannot be reset. If you need a version that
resets the count, consider using a SyncPrimitives.CyclicBarrier.
Example
iex> latch = SyncPrimitives.CountDownLatch.start(2, fn -> IO.puts("latch done") end)
{SyncPrimitives.CountDownLatch, #PID<0.227.0>}
iex> spawn_link(fn ->
...> IO.puts("before wait")
...> SyncPrimitives.CountDownLatch.await(latch)
...> IO.puts("after wait")
...> end)
before wait
#PID<0.233.0>
iex> # nothing happens for a while
nil
iex> SyncPrimitives.CountDownLatch.count_down(latch)
:ok
iex> SyncPrimitives.CountDownLatch.count_down(latch)
latch done
after wait
:ok
iex> SyncPrimitives.CountDownLatch.stop(latch)
:ok
Link to this section Summary
Link to this section Types
Link to this section Functions
Link to this function
start(count, action \\ nil)
View Sourcestart(pos_integer(), nil | (() -> any())) :: latch()