Multithreading con buffer triplo, devo fare l'attesa per la variabile condition?

2

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();
}
    
posta tzippy 13.08.2015 - 14:34
fonte

1 risposta

2

L'intero punto delle variabili di condizione è che puoi sospendere un thread fino a quando si verifica qualche evento esterno (per quel thread).

Il vantaggio di sospendere un thread per consentirne l'esecuzione continua e controllare se può continuare è che un thread sospeso non consuma inutilmente il tempo della CPU e consente al processore di essere utilizzato per eseguire attività utili.

    
risposta data 13.08.2015 - 18:24
fonte

Leggi altre domande sui tag