Esempio n. 1
0
 def __init__(self):
     self.buffer = []
     tem_dado = Slock()  # Mutex usado para informar se tem dado no buffer
     tem_dado.acquire()  # Inicialmente não há dados no buffer
     self.tem_dado = tem_dado
     self.buffer_sendo_acessado = Slock()  # Usado para indicar que o buffer está sendo usado
     self.número_máximo_dados = float("inf")
Esempio n. 2
0
class Buffer(object):
    def __init__(self):
        self.buffer = []
        tem_dado = Slock()  # Mutex usado para informar se tem dado no buffer
        tem_dado.acquire()  # Inicialmente não há dados no buffer
        self.tem_dado = tem_dado
        self.buffer_sendo_acessado = Slock()  # Usado para indicar que o buffer está sendo usado
        self.número_máximo_dados = float("inf")

    def append_buffer(self, dado):
        self.buffer_sendo_acessado.acquire()  # Thread pedindo o acesso ao buffer de saída
        if self.número_máximo_dados > len(self.buffer):
            self.buffer.append(dado)
        try:
            self.tem_dado.release()  # informa que há dados na saída
        except RuntimeError:
            pass
        self.buffer_sendo_acessado.release()

    def pop_buffer(self):
        self.tem_dado.acquire()
        self.buffer_sendo_acessado.acquire()  # Thread pedindo o acesso ao buffer
        dado = self.buffer.pop(0)
        if len(self.buffer) > 0:
            # Se for o último dado a ser lido e removido então informo que não há mais dados no buffer
            self.tem_dado.release()
        self.buffer_sendo_acessado.release()
        return dado

    def set_numero_máximo_dados(self, número_máximo_dados):
        self.número_máximo_dados = número_máximo_dados