Advertisement
Guest User

Untitled

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