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