- File:
-
- 1 edited
-
src/tests/concurrent/examples/boundedBufferINT.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/tests/concurrent/examples/boundedBufferINT.c
r623c16a r58caf150 8 8 // Created On : Mon Oct 30 12:45:13 2017 9 9 // Last Modified By : Peter A. Buhr 10 // Last Modified On : Thu Apr 26 23:08:17201811 // Update Count : 8210 // Last Modified On : Fri Apr 20 22:18:18 2018 11 // Update Count : 78 12 12 // 13 13 … … 22 22 enum { BufferSize = 50 }; 23 23 24 forall( otype T ) {25 monitor Buffer {26 condition full, empty;27 int front, back, count;28 T elements[BufferSize];29 }; // Buffer 24 forall( otype T ) 25 monitor Buffer { 26 condition full, empty; 27 int front, back, count; 28 T elements[BufferSize]; 29 }; 30 30 31 void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; } 31 forall( otype T ) 32 void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; } 32 33 33 int query( Buffer(T) & buffer ) { return buffer.count; } // read-only, no mutual exclusion 34 forall( otype T ) 35 int query( Buffer(T) & buffer ) { return buffer.count; } 34 36 35 void insert( Buffer(T) & mutex buffer, T elem ) with( buffer ) { 36 if ( count == BufferSize ) wait( empty ); 37 elements[back] = elem; 38 back = ( back + 1 ) % BufferSize; 39 count += 1; 40 signal( full ); 41 } // insert 37 forall( otype T ) 38 void insert( Buffer(T) & mutex buffer, T elem ) with( buffer ) { 39 if ( count == BufferSize ) wait( empty ); 40 elements[back] = elem; 41 back = ( back + 1 ) % BufferSize; 42 count += 1; 43 signal( full ); 44 } 42 45 43 T remove( Buffer(T) & mutex buffer ) with( buffer ) { 44 if ( count == 0 ) wait( full ); 45 T elem = elements[front];46 front = ( front + 1 ) % BufferSize;47 count -= 1;48 signal( empty );49 return elem;50 } // remove46 forall( otype T ) 47 T remove( Buffer(T) & mutex buffer ) with( buffer ) { 48 if ( count == 0 ) wait( full ); 49 T elem = elements[front]; 50 front = ( front + 1 ) % BufferSize; 51 count -= 1; 52 signal( empty ); 53 return elem; 51 54 } 52 55
Note:
See TracChangeset
for help on using the changeset viewer.