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