Download c source code

main:
	shared thread_count := read_integer()
	shared ready[]
	for index := 0 to thread_count do
		ready[index] := semaphore(not index)
		create_thread(1, secondary, index)

secondary(rank):
	wait(ready[rank])
	statement s1
	signal(ready[(rank + 1) % thread_count])