Changes in src/tests/sched-int-disjoint.c [303406a:83a071f9]
- File:
-
- 1 edited
-
src/tests/sched-int-disjoint.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/tests/sched-int-disjoint.c
r303406a r83a071f9 4 4 #include <thread> 5 5 6 #include <time.h> 7 8 static const unsigned long N = 10_000ul; 9 10 #ifndef PREEMPTION_RATE 11 #define PREEMPTION_RATE 10_000ul 6 #ifndef N 7 #define N 10_000 12 8 #endif 13 14 unsigned int default_preemption() {15 return PREEMPTION_RATE;16 }17 9 18 10 enum state_t { WAIT, SIGNAL, BARGE }; … … 22 14 23 15 monitor global_data_t; 24 void ?{}( global_data_t *this );25 void ^?{} ( global_data_t *this );16 void ?{}( global_data_t & this ); 17 void ^?{} ( global_data_t & this ); 26 18 27 19 monitor global_data_t { … … 34 26 volatile bool all_done; 35 27 36 void ?{}( global_data_t *this ) {37 this ->counter == 0;38 this ->state = BARGE;28 void ?{}( global_data_t & this ) { 29 this.counter == 0; 30 this.state = BARGE; 39 31 } 40 32 41 void ^?{} ( global_data_t *this ) {}33 void ^?{} ( global_data_t & this ) {} 42 34 43 35 //------------------------------------------------------------------------------ 44 36 // Barging logic 45 void barge( global_data_t *mutex d ) {46 d ->state = BARGE;37 void barge( global_data_t & mutex d ) { 38 d.state = BARGE; 47 39 } 48 40 49 41 thread Barger {}; 50 42 51 void main( Barger *this ) {43 void main( Barger & this ) { 52 44 while( !all_done ) { 53 barge( &data );45 barge( data ); 54 46 yield(); 55 47 } … … 58 50 //------------------------------------------------------------------------------ 59 51 // Waiting logic 60 bool wait( global_t * mutex m, global_data_t *mutex d ) {52 bool wait( global_t & mutex m, global_data_t & mutex d ) { 61 53 wait( &cond ); 62 if( d ->state != SIGNAL ) {54 if( d.state != SIGNAL ) { 63 55 sout | "ERROR barging!" | endl; 64 56 } 65 57 66 d ->counter++;58 d.counter++; 67 59 68 if( (d ->counter % 1000) == 0 ) sout | d->counter | endl;60 if( (d.counter % 1000) == 0 ) sout | d.counter | endl; 69 61 70 return d ->counter < N;62 return d.counter < N; 71 63 } 72 64 73 65 thread Waiter {}; 74 66 75 void main( Waiter *this ) {76 while( wait( &mut, &data ) ) { yield(); }67 void main( Waiter & this ) { 68 while( wait( mut, data ) ) { yield(); } 77 69 } 78 70 … … 80 72 //------------------------------------------------------------------------------ 81 73 // Signalling logic 82 void signal( condition * cond, global_t * mutex a, global_data_t *mutex b ) {83 b ->state = SIGNAL;74 void signal( condition * cond, global_t & mutex a, global_data_t & mutex b ) { 75 b.state = SIGNAL; 84 76 signal( cond ); 85 77 } 86 78 87 void logic( global_t *mutex a ) {88 signal( &cond, a, &data );79 void logic( global_t & mutex a ) { 80 signal( &cond, a, data ); 89 81 90 82 yield( (unsigned)rand48() % 10 ); … … 99 91 thread Signaller {}; 100 92 101 void main( Signaller *this ) {93 void main( Signaller & this ) { 102 94 while( !all_done ) { 103 logic( &mut );95 logic( mut ); 104 96 yield(); 105 97 } … … 109 101 // Main loop 110 102 int main(int argc, char* argv[]) { 111 rand48seed( time( NULL ) );112 103 all_done = false; 113 104 processor p;
Note:
See TracChangeset
for help on using the changeset viewer.