User Tools

Site Tools


boundedbuffer

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
boundedbuffer [2007/09/24 19:50] niloo59boundedbuffer [2007/09/25 05:20] (current) nshafiei
Line 216: Line 216:
   int i,j, data;   int i,j, data;
   in("head",?i);   in("head",?i);
 +  rd("tail",?j);
 +  #wait when the buffer is empty
 +  while (i==j) rd("tail",?j);
   in("buffer",i,?data);   in("buffer",i,?data);
   i=(i+1)%BUFFERSIZE;   i=(i+1)%BUFFERSIZE;
Line 227: Line 230:
   in("tail",?j);   in("tail",?j);
   rd("head",?i);   rd("head",?i);
-  #loop when the buffer is full+  #wait when the buffer is full
   while ( j-i==BUFFERSIZE-1 || i-j==1 ) rd("head",?i);   while ( j-i==BUFFERSIZE-1 || i-j==1 ) rd("head",?i);
   j=(j+1)%BUFFERSIZE;   j=(j+1)%BUFFERSIZE;
Line 270: Line 273:
 </code> </code>
  
 +
 +
 +<code c>
 +
 +// i1 and i2 are initialized to 0
 +void put(int data)
 +{
 +      int i1, i2;
 +      read("consumer", ?i2);
 +      in("producer",?i1);
 +      if(i1==size)i1=0;      
 +      while(i1+1==i2 || (i1+1==size && i2==0))
 +         read("consumer",?i2);      
 +      out("data", data, i1); 
 +      out("producer", i1+1);        
 +}
 +
 +
 +int get()
 +{
 +      int i2, data;
 +      in("consumer",?i2);
 +      if(i2==size)i2=0;
 +      in("data",?data,i2);
 +      out("consumer", i2+1);       
 +      return data; 
 +}
 +
 +</code>
boundedbuffer.1190663441.txt.gz · Last modified: 2007/09/24 19:50 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki