Download pseudo source code

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

main:
	thread_count := read_integer()
	create_threads(thread_count, secondary)

secondary:
	Statement A

  // Adapt rendezvous solution here
  wait(can_access_count)
    count := count + 1
    if count = thread_count then
      for index := 0 to thread_count do
        signal(barrier)
      end for
    end if
  signal(can_access_count)

  wait(barrier)

  Statement B