Skip to content

Commit

Permalink
Barrier: Use own implementation every time
Browse files Browse the repository at this point in the history
That is simpler. Only one implementation can be flawed if bugs occur.
  • Loading branch information
sils committed May 13, 2015
1 parent 2dbd0d8 commit 1f1917f
Showing 1 changed file with 17 additions and 18 deletions.
35 changes: 17 additions & 18 deletions coalib/processes/Barrier.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
import multiprocessing
import sys


# we measure only python 3.4 coverage
if sys.version_info < (3, 3): # pragma: no cover
class Barrier:
def __init__(self, parties):
self.parties = parties
self.__count = multiprocessing.Value('i', 0)
self.__barrier = multiprocessing.Semaphore(0)
class Barrier:
"""
A simple barrier object imitating the multiprocessing.Barrier objects API.
However we cannot use that as it is not available for python 3.2.
"""
def __init__(self, parties):
self.parties = parties
self.__count = multiprocessing.Value('i', 0)
self.__barrier = multiprocessing.Semaphore(0)

def wait(self):
with self.__count.get_lock():
self.__count.value += 1
def wait(self):
with self.__count.get_lock():
self.__count.value += 1

# The last process releases the previous ones and so forth
if self.__count.value == self.parties:
self.__barrier.release()
# The last process releases the previous ones and so forth
if self.__count.value == self.parties:
self.__barrier.release()

self.__barrier.acquire()
self.__barrier.release()
else:
from multiprocessing import Barrier
self.__barrier.acquire()
self.__barrier.release()

0 comments on commit 1f1917f

Please sign in to comment.