Changes in tests/concurrent/preempt.cfa [7b2c8c3c:b200492]
- File:
-
- 1 edited
-
tests/concurrent/preempt.cfa (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tests/concurrent/preempt.cfa
r7b2c8c3c rb200492 1 #include <clock.hfa>2 1 #include <fstream.hfa> 3 2 #include <kernel.hfa> … … 23 22 extern void __cfaabi_check_preemption(); 24 23 25 static struct { 26 volatile int counter; 27 volatile Time prev; 28 Duration durations[6]; 29 } globals; 24 static volatile int counter = 0; 30 25 31 26 thread worker_t { 32 27 int value; 33 unsigned long longspin;28 unsigned spin; 34 29 }; 35 30 … … 40 35 41 36 void main(worker_t & this) { 42 while(TEST( globals.counter < N)) {43 if(this.spin > 50_000_000_000) abort | "Worker" | this.value | "has been spinning too long! (" | this.spin | ")";37 while(TEST(counter < N)) { 38 if(this.spin > 100_000_000) abort | "Worker" | this.value | "has been spinning too long! (" | this.spin | ")"; 44 39 __cfaabi_check_preemption(); 45 if( ( globals.counter % 7) == this.value ) {40 if( (counter % 7) == this.value ) { 46 41 __cfaabi_check_preemption(); 47 #if !defined(TEST_LONG) 48 Time now = timeHiRes(); 49 Duration diff = now - globals.prev; 50 globals.prev = now; 51 #endif 52 int next = __atomic_add_fetch( &globals.counter, 1, __ATOMIC_SEQ_CST ); 42 int next = __atomic_add_fetch( &counter, 1, __ATOMIC_SEQ_CST ); 53 43 __cfaabi_check_preemption(); 54 if( (next % 100) == 0 ) { 55 #if !defined(TEST_LONG) 56 unsigned idx = next / 100; 57 if (idx >= 6) abort | "Idx from next is invalid: " | idx | "vs" | next; 58 globals.durations[idx] = diff; 59 if(diff > 12`s) serr | "Duration suspiciously large:" | diff; 60 #endif 61 printf("%d\n", (int)next); 62 63 } 44 if( (next % 100) == 0 ) printf("%d\n", (int)next); 64 45 __cfaabi_check_preemption(); 65 46 this.spin = 0; … … 73 54 int main(int argc, char* argv[]) { 74 55 processor p; 75 globals.counter = 0;76 globals.durations[0] = 0;77 globals.durations[1] = 0;78 globals.durations[2] = 0;79 globals.durations[3] = 0;80 globals.durations[4] = 0;81 globals.durations[5] = 0;82 56 { 83 globals.prev = timeHiRes();84 57 worker_t w0 = 0; 85 58 worker_t w1 = 1;
Note:
See TracChangeset
for help on using the changeset viewer.