Ho un'implementazione a buffer triplo che viene spesso utilizzata nei thread in modo tale che quando sono previsti nuovi dati, c'è sempre una funzione WaitData(n)
chiamata sul buffer (viene chiamata la funzione timed_wait(n)
di una variabile di condizione) e successivamente un HasNewData()
viene chiamato sul buffer.
Se entrambi restituiscono true, il buffer può essere letto.
Quando il buffer viene scritto correttamente su, il notify_all()
della variabile di condizione notifica a tutte le funzioni in attesa.
Ora mi chiedo, perché devo fare l'attesa per la variabile di condizione? Non riesco a sondare periodicamente il HasNewData()
del buffer triplo?
Entrambi sembrano avere lo stesso scopo per me! Solo con la funzione WaitData()
il mio thread sta bloccando per n
secondi.
Ecco un esempio di codice di un thread di lettura e scrittura
::readThread()
{
if(buffer.WaitData(3) && buffer.IsData())
{
data = buffer.GetRead();
buffer.Release();
}
}
::writeThread()
{
data = buffer.GetWrite();
data = FillBuffer();
buffer.Release();
}