Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/tests/concurrent/examples/boundedBufferINT.c

    r623c16a r58caf150  
    88// Created On       : Mon Oct 30 12:45:13 2017
    99// Last Modified By : Peter A. Buhr
    10 // Last Modified On : Thu Apr 26 23:08:17 2018
    11 // Update Count     : 82
     10// Last Modified On : Fri Apr 20 22:18:18 2018
     11// Update Count     : 78
    1212//
    1313
     
    2222enum { BufferSize = 50 };
    2323
    24 forall( otype T ) {
    25         monitor Buffer {
    26                 condition full, empty;
    27                 int front, back, count;
    28                 T elements[BufferSize];
    29         }; // Buffer
     24forall( otype T )
     25monitor Buffer {
     26        condition full, empty;
     27        int front, back, count;
     28        T elements[BufferSize];
     29};
    3030
    31         void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; }
     31forall( otype T )
     32void ?{}( Buffer(T) & buffer ) with( buffer ) { [front, back, count] = 0; }
    3233
    33         int query( Buffer(T) & buffer ) { return buffer.count; } // read-only, no mutual exclusion
     34forall( otype T )
     35int query( Buffer(T) & buffer ) { return buffer.count; }
    3436
    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
     37forall( otype T )
     38void 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}
    4245
    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
     46forall( otype T )
     47T 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;
    5154}
    5255
Note: See TracChangeset for help on using the changeset viewer.