package multicore-bench

  1. Overview
  2. Docs

Source file barrier.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
type t = { counter : int Atomic.t; total : int }

let make total =
  { counter = Atomic.make 0 |> Multicore_magic.copy_as_padded; total }
  |> Multicore_magic.copy_as_padded

let await { counter; total } =
  if Atomic.get counter = total then
    Atomic.compare_and_set counter total 0 |> ignore;
  Atomic.incr counter;
  while Atomic.get counter < total do
    Domain.cpu_relax ()
  done