# barrier2.py import time import threading import thread from pybarrier import * # setup for master control global N global Njob global bar N = 4 Njob = 2 print "barrier2.py running, N=", print N, print ", Njob=", print Njob bar=barrier(N+1) # N workers and one master class Worker(threading.Thread): # worker initialization def __init__ (self,myid): self.myid=myid threading.Thread.__init__(self) print "worker myid=", print self.myid, print " init, started" def run(self): # worker running for job in range(0,Njob): print "worker myid=", print self.myid, print ", job=", print job print " running, at first barrier" bar.wait() #1a master runs bar.wait() #1b master completed print "worker myid=", print self.myid, print ", job=", print job print " running, at second barrier" bar.wait() #2a master runs bar.wait() #2b master completed # end job loop print "worker myid=", print self.myid, print " ending" bar.wait() #3a master waits for all tasks to end, join # master control for i in range(1,N+1): # start N threads Worker(i).start() for job in range(0,Njob): bar.wait() #1a print "master at first barrier, job ", print job bar.wait() #1b bar.wait() #2a print "master at second barrier, job ", print job bar.wait() #2b # end job loop - must be exactly number of iterations as worker bar.wait() #3a print "master ending"