Changeset 28e58fd for src/tests/sched-int-block.c
- Timestamp:
- Aug 25, 2017, 10:38:34 AM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 800d275
- Parents:
- af08051 (diff), 3eab308c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/tests/sched-int-block.c
raf08051 r28e58fd 24 24 }; 25 25 26 void ?{} ( global_data_t *this ) {27 this ->last_thread = NULL;28 this ->last_signaller = NULL;26 void ?{} ( global_data_t & this ) { 27 this.last_thread = NULL; 28 this.last_signaller = NULL; 29 29 } 30 30 31 void ^?{} ( global_data_t *this ) {}31 void ^?{} ( global_data_t & this ) {} 32 32 33 33 global_data_t globalA, globalB; … … 38 38 39 39 //------------------------------------------------------------------------------ 40 void wait_op( global_data_t * mutex a, global_data_t *mutex b, unsigned i ) {40 void wait_op( global_data_t & mutex a, global_data_t & mutex b, unsigned i ) { 41 41 wait( &cond, (uintptr_t)this_thread ); 42 42 43 43 yield( ((unsigned)rand48()) % 10 ); 44 44 45 if(a ->last_thread != a->last_signaller || b->last_thread != b->last_signaller ) {46 sout | "ERROR Barging detected, expected" | a ->last_signaller | b->last_signaller | "got" | a->last_thread | b->last_thread | endl;45 if(a.last_thread != a.last_signaller || b.last_thread != b.last_signaller ) { 46 sout | "ERROR Barging detected, expected" | a.last_signaller | b.last_signaller | "got" | a.last_thread | b.last_thread | endl; 47 47 abort(); 48 48 } 49 49 50 a ->last_thread = b->last_thread = this_thread;50 a.last_thread = b.last_thread = this_thread; 51 51 52 52 yield( ((unsigned)rand48()) % 10 ); … … 54 54 55 55 thread Waiter {}; 56 void main( Waiter *this ) {56 void main( Waiter & this ) { 57 57 for( int i = 0; i < N; i++ ) { 58 wait_op( &globalA, &globalB, i );58 wait_op( globalA, globalB, i ); 59 59 } 60 60 } 61 61 62 62 //------------------------------------------------------------------------------ 63 void signal_op( global_data_t * mutex a, global_data_t *mutex b ) {63 void signal_op( global_data_t & mutex a, global_data_t & mutex b ) { 64 64 yield( ((unsigned)rand48()) % 10 ); 65 65 66 a->last_thread = b->last_thread = a->last_signaller = b->last_signaller= this_thread;66 [a.last_thread, b.last_thread, a.last_signaller, b.last_signaller] = this_thread; 67 67 68 68 if( !is_empty( &cond ) ) { … … 77 77 yield( ((unsigned)rand48()) % 10 ); 78 78 79 if(a ->last_thread != next || b->last_thread != next) {80 sout | "ERROR Barging detected, expected" | next | "got" | a ->last_thread | b->last_thread | endl;79 if(a.last_thread != next || b.last_thread != next) { 80 sout | "ERROR Barging detected, expected" | next | "got" | a.last_thread | b.last_thread | endl; 81 81 abort(); 82 82 } … … 86 86 87 87 thread Signaller {}; 88 void main( Signaller *this ) {88 void main( Signaller & this ) { 89 89 while( !done ) { 90 signal_op( &globalA, &globalB );90 signal_op( globalA, globalB ); 91 91 } 92 92 } 93 93 94 94 //------------------------------------------------------------------------------ 95 void barge_op( global_data_t *mutex a ) {96 a ->last_thread = this_thread;95 void barge_op( global_data_t & mutex a ) { 96 a.last_thread = this_thread; 97 97 } 98 98 99 99 thread Barger {}; 100 void main( Barger *this ) {100 void main( Barger & this ) { 101 101 for( unsigned i = 0; !done; i++ ) { 102 102 //Choose some monitor to barge into with some irregular pattern 103 103 bool choose_a = (i % 13) > (i % 17); 104 barge_op( choose_a ? &globalA : &globalB ); 104 if ( choose_a ) barge_op( globalA ); 105 else barge_op( globalB ); 105 106 } 106 107 }
Note:
See TracChangeset
for help on using the changeset viewer.