Download pseudo source code

procedure main()
  input const skater_count, const room_capacity
  shared can_skate := create_semaphore(room_capacity)
  create_threads(skater_count, skater)
end procedure

procedure skater()
  // Concurrency-bounded region
  wait(can_skate)
  skate()
  signal(can_skate)
end procedure