- File:
-
- 1 edited
-
src/tests/concurrent/examples/boundedBufferINT.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/tests/concurrent/examples/boundedBufferINT.c
r58caf150 r623c16a 8 8 // Created On : Mon Oct 30 12:45:13 2017 9 9 // Last Modified By : Peter A. Buhr 10 // Last Modified On : Fri Apr 20 22:18:18201811 // Update Count : 7810 // Last Modified On : Thu Apr 26 23:08:17 2018 11 // Update Count : 82 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 }; 24 forall( otype T ) { 25 monitor Buffer { 26 condition full, empty; 27 int front, back, count; 28 T elements[BufferSize]; 29 }; // Buffer 30 30 31 forall( otype T ) 32 void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; } 31 void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; } 33 32 34 forall( otype T ) 35 int query( Buffer(T) & buffer ) { return buffer.count; } 33 int query( Buffer(T) & buffer ) { return buffer.count; } // read-only, no mutual exclusion 36 34 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 } 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 45 42 46 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;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 } // remove 54 51 } 55 52
Note:
See TracChangeset
for help on using the changeset viewer.