8
votes

Mise en œuvre du tampon circulaire en C

J'ai trouvé un pseudo code sur la manière de mettre en place un tampon circulaire.

// Producer.
while (true) {
  /* produce item v */
  while ((in+1)%n == out)
    /* Wait. */;
  b[in] = v;
  in = (in + 1) % n
}

// Consumer.
while (true) {
  while (in == out)
    /* Wait. */;
  w = b[out];
  out = (out + 1) % n;
  /* Consume item w. */
}


0 commentaires

3 Réponses :


0
votes

Oui, car alors c'est hors du tampon, lequel dit la ligne suivante est vide. Ensuite, nous pouvons traiter w.


0 commentaires

1
votes

Ces deux lignes font partie du processus de consommation:

w = b[out];
out = (out + 1) % n;


3 commentaires

Quand il est écrit / * produire l'élément V * / Nous devons attribuer V à un nombre aléatoire ou quelque chose du genre. Je pensais avoir besoin d'un processus différent pour "/ * consommer l'élément w. * / `


Consommez un élément signifie récupérer sa valeur et ne l'accède plus.


"Le commentaire fait référence aux deux lignes précédemment." - Ce qui, j'ajouterais, devrait être illégal.



9
votes

avec xxx

Vous ne saisissez qu'une copie de l'élément à consommer. Avec xxx

Vous avancez l'index de l'élément à consommer, empêchant ainsi d'être référencé à nouveau.

d'une manière, plusieurs appels à W = B [OUT]; Ne consommez pas réellement le logement de la mémoire tampon, il y accède simplement; tandis que out = (out + 1)% n; empêche l'accès supplémentaire de cet élément. Empêcher davantage l'accès de l'élément tampon est la définition la plus forte du terme "consommer l'élément" que je peux penser.


0 commentaires