Download c source code

// How many threads have arrived to the barrier
shared count := 0
// Protects the increment of the count
shared mutex := semaphore(1)
// Locked (0) until all threads arrive, then it is unlocked (1)
shared barrier := semaphore(0)

main:
	// Create arbitrary amount of threads
  shared thread_count := read_integer()
  create_thread(secondary, thread_count)

secondary:
  Statement A

  // Barrier: a generalized rendezvous
  wait(mutex)
	// If this is the last thread that reaches the barrier
  count := count + 1
  if count = thread_count then
    while count > 0 do
      signal(barrier)
      count := count - 1
  signal(mutex);
  wait(barrier)

	// Statement B must be executed until
	// all threads have executed Statement A
  Statement B