Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.59 KB | None | 0 0
  1. import threading
  2. import time
  3.  
  4.  
  5. class myThread(threading.Thread):
  6. threadCounter = 0
  7. barrierCounter = 0
  8. exitCounter = 0
  9. lock = threading.Lock()
  10. cv = threading.Condition(lock)
  11.  
  12. def __enter__(self):
  13. return self
  14.  
  15.  
  16. def __init__(self, threadID, name):
  17. threading.Thread.__init__(self)
  18. self.threadID = threadID
  19. self.name = name
  20. with myThread.lock:
  21. myThread.threadCounter += 1
  22.  
  23.  
  24. def run(self):
  25. print(self.name + " is starting.")
  26. time.sleep(self.threadID * 2)
  27. print(self.name + " is ending.")
  28. self.barrier()
  29. print(self.name + " - ended")
  30.  
  31. def barrier(self):
  32. myThread.cv.acquire()
  33. myThread.barrierCounter += 1
  34. while myThread.barrierCounter < myThread.threadCounter:
  35. myThread.cv.wait()
  36. myThread.exitCounter += 1
  37. if myThread.exitCounter >= myThread.threadCounter:
  38. myThread.exitCounter = 0
  39. myThread.barrierCounter = 0
  40. myThread.cv.notify_all()
  41. myThread.cv.release()
  42.  
  43. def __exit__(self, exc_type, exc_val, exc_tb):
  44. with myThread.lock:
  45. myThread.threadCounter -= 1
  46.  
  47.  
  48. with myThread(1, "Thread 1") as t1, myThread(2, "Thread 2") as t2, myThread(3, "Thread 3") as t3:
  49. t1.start()
  50. t2.start()
  51. t3.start()
  52.  
  53. t1.join()
  54. t2.join()
  55. t3.join()
  56.  
  57. with myThread(1, "Thread 4") as t1, myThread(2, "Thread 5") as t2, myThread(3, "Thread 6") as t3:
  58. t1.start()
  59. t2.start()
  60. t3.start()
  61.  
  62. t1.join()
  63. t2.join()
  64. t3.join()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement