Changes in / [cd3aee2:f739788]


Ignore:
Location:
src/tests/concurrent/examples
Files:
2 edited

Legend:

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

    rcd3aee2 rf739788  
    88// Created On       : Mon Oct 30 12:45:13 2017
    99// Last Modified By : Peter A. Buhr
    10 // Last Modified On : Thu Dec 14 21:28:52 2017
    11 // Update Count     : 32
     10// Last Modified On : Wed Dec 13 21:01:49 2017
     11// Update Count     : 27
    1212//
    1313
     
    1818#include <unistd.h>                                                                             // getpid
    1919
     20forall( otype T )
    2021monitor Buffer {
    2122        condition full, empty;
    2223        int front, back, count;
    23         int elements[20];
     24        T elements[20];
    2425};
    2526
    26 void ?{}( Buffer & buffer ) {
     27forall( otype T )
     28void ?{}( Buffer(T) & buffer ) {
    2729        buffer.front = buffer.back = buffer.count = 0;
    2830}
    2931
    30 int query( Buffer & buffer ) { return buffer.count; }
     32forall( otype T )
     33int query( Buffer(T) & buffer ) { return buffer.count; }
    3134
    32 void insert( Buffer & mutex buffer, int elem ) with( buffer ) {
     35forall( otype T )
     36void insert( Buffer(T) & mutex buffer, T elem ) with( buffer ) {
    3337        if ( count == 20 ) wait( empty );
    3438        elements[back] = elem;
     
    3842}
    3943
    40 int remove( Buffer & mutex buffer ) with( buffer ) {
     44forall( otype T )
     45T remove( Buffer(T) & mutex buffer ) with( buffer ) {
    4146        if ( count == 0 ) wait( full );
    42         int elem = elements[front];
     47        T elem = elements[front];
    4348        front = ( front + 1 ) % 20;
    4449        count -= 1;
     
    4853
    4954thread Producer {
    50         Buffer & buffer;
     55        Buffer(int) & buffer;
    5156        unsigned int N;
    5257};
     
    5863        insert( prod.buffer, -1 );
    5964}
    60 void ?{}( Producer & prod, Buffer * buffer, unsigned int N ) {
     65void ?{}( Producer & prod, Buffer(int) * buffer, unsigned int N ) {
    6166        &prod.buffer = buffer;
    6267        prod.N = N;
     
    6469
    6570thread Consumer {
    66         Buffer & buffer;
     71        Buffer(int) & buffer;
    6772        int & sum;                                              // summation of producer values
    6873};
     
    7681        } // for
    7782}
    78 void ?{}( Consumer & cons, Buffer * buffer, int * sum ) {
     83void ?{}( Consumer & cons, Buffer(int) * buffer, int * sum ) {
    7984        &cons.buffer = buffer;
    8085        &cons.sum = sum;
     
    8287
    8388int main() {
    84         Buffer buffer;
     89        Buffer(int) buffer;
    8590        enum { Prods = 5, Cons = 5 };
    8691        Producer * prods[Prods];
  • src/tests/concurrent/examples/quickSort.c

    rcd3aee2 rf739788  
    99// Created On       : Wed Dec  6 12:15:52 2017
    1010// Last Modified By : Peter A. Buhr
    11 // Last Modified On : Thu Dec 14 11:20:40 2017
    12 // Update Count     : 142
     11// Last Modified On : Wed Dec 13 18:20:18 2017
     12// Update Count     : 138
    1313//
    1414
     
    1919#include <string.h>                                                                             // strcmp
    2020
    21 forall( otype T | { int ?<?( T, T ); } )
     21forall( otype T | { T ?<?( T, T ); } )
    2222thread Quicksort {
    2323        T * values;                                                                                     // communication variables
     
    2525};
    2626
    27 forall( otype T | { int ?<?( T, T ); } )
     27forall( otype T | { T ?<?( T, T ); } )
    2828void ?{}( Quicksort(T) & qs, T values[], int size, int depth ) {
    2929        qs.values = values;  qs.low = 0;  qs.high = size;  qs.depth = depth;
    3030} // Quicksort
    3131
    32 forall( otype T | { int ?<?( T, T ); } )
     32forall( otype T | { T ?<?( T, T ); } )
    3333void main( Quicksort(T) & qs ) {
    3434        // nested routines: information hiding
     
    140140                        unsortedfile | size;                                            // read number of elements in the list
    141141                  if ( eof( unsortedfile ) ) break;
    142 //                      ELEMTYPE * values = anew( size );                       // values to be sorted, too large to put on stack
    143                         ELEMTYPE * values = alloc( size );                      // values to be sorted, too large to put on stack
    144 //                      ELEMTYPE * values = (ELEMTYPE *)malloc( sizeof(ELEMTYPE) * size );
     142                        ELEMTYPE * values = anew( size );                       // values to be sorted, too large to put on stack
    145143                        for ( int counter = 0; counter < size; counter += 1 ) { // read unsorted numbers
    146144                                unsortedfile | values[counter];
     
    167165                processor processors[ (1 << depth) - 1 ] __attribute__(( unused )); // create 2^depth-1 kernel threads
    168166
    169 //              ELEMTYPE * values = anew( size );                               // values to be sorted, too large to put on stack
    170                 ELEMTYPE * values = alloc( size );                              // values to be sorted, too large to put on stack
     167                ELEMTYPE * values = anew( size );                               // values to be sorted, too large to put on stack
    171168                for ( int counter = 0; counter < size; counter += 1 ) { // generate unsorted numbers
    172169                        values[counter] = size - counter;                       // descending values
Note: See TracChangeset for help on using the changeset viewer.