Implementing a Barrier

This lesson discusses how a barrier can be implemented in Python.

We'll cover the following...

Implementing a Barrier

A barrier can be thought of as a point in the program code, which all or some of the threads need to reach at before any one of them is allowed to proceed further.

widget

Solution

A barrier allows multiple threads to congregate at a point in code before any one of the thread is allowed to move forward. Python and most other languages provide libraries which make barrier construct available for developer use. Even though we are re-inventing the wheel but this makes for a good interview question.

We can immediately realize that our solution will need a count variable to track the number of threads that have arrived at the barrier. If we have n threads, then n-1 threads must wait for the nth thread to arrive. This suggests we have the n-1 threads execute the wait method and the nth thread wakes up all the asleep n-1 threads.

Below is the code:

class Barrier(object):
    def __init__(self, size):
        self.barrier_size = size
        self.reached_count = 0
        self.cond = Condition()

    def arrived(self):
        self.cond.acquire()
        self.reached_count += 1

        if self.reached_count == self.barrier_size:
            self.cond.notifyAll()
            self.reached_count = 0
        else:
     
...