Changes in / [7dc2e015:3d5701e]
- Location:
- tests/concurrent/park
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
tests/concurrent/park/.expect/force_preempt.txt
r7dc2e015 r3d5701e 1 0 Calling unpark 0 2 1 Calling unpark 0 3 2 Calling unpark 0 4 3 Calling unpark 0 5 4 Calling unpark 0 6 0 Parking 0 7 0 Unparked 0 8 0 Calling unpark 1 9 1 Parking 0 10 1 Unparked 0 11 1 Calling unpark 1 12 2 Parking 0 13 2 Unparked 0 14 2 Calling unpark 1 15 3 Parking 0 16 3 Unparked 0 17 3 Calling unpark 1 18 4 Parking 0 19 4 Unparked 0 20 4 Calling unpark 1 21 0 Parking 1 22 0 Unparked 1 23 0 Calling unpark 2 24 1 Parking 1 25 1 Unparked 1 26 1 Calling unpark 2 27 2 Parking 1 28 2 Unparked 1 29 2 Calling unpark 2 30 3 Parking 1 31 3 Unparked 1 32 3 Calling unpark 2 33 4 Parking 1 34 4 Unparked 1 35 4 Calling unpark 2 36 0 Parking 2 37 0 Unparked 2 38 0 Calling unpark 3 39 1 Parking 2 40 1 Unparked 2 41 1 Calling unpark 3 42 2 Parking 2 43 2 Unparked 2 44 2 Calling unpark 3 45 3 Parking 2 46 3 Unparked 2 47 3 Calling unpark 3 48 4 Parking 2 49 4 Unparked 2 50 4 Calling unpark 3 51 0 Parking 3 52 0 Unparked 3 53 0 Calling unpark 4 54 1 Parking 3 55 1 Unparked 3 56 1 Calling unpark 4 57 2 Parking 3 58 2 Unparked 3 59 2 Calling unpark 4 60 3 Parking 3 61 3 Unparked 3 62 3 Calling unpark 4 63 4 Parking 3 64 4 Unparked 3 65 4 Calling unpark 4 66 0 Parking 4 67 0 Unparked 4 68 1 Parking 4 69 1 Unparked 4 70 2 Parking 4 71 2 Unparked 4 72 3 Parking 4 73 3 Unparked 4 74 4 Parking 4 75 4 Unparked 4 -
tests/concurrent/park/force_preempt.cfa
r7dc2e015 r3d5701e 16 16 } 17 17 18 thread Waiter; 18 19 thread Waiter {}; 20 19 21 20 22 volatile int count = 0; … … 23 25 // Get a unique id 24 26 int id = __atomic_fetch_add(&count, 1, __ATOMIC_SEQ_CST); 25 int id_hash = id | (id << 8) | (id << 16) | (id << 24);26 int mask = 0xCAFEBABA;27 27 28 28 for(int i = 0; i < 5; i++) { 29 assert(mask == 0xCAFEBABA);30 31 29 // Unpark this thread, don't force a yield 30 sout | id | "Calling unpark" | i; 32 31 unpark(this); 33 assert(mask == 0xCAFEBABA);34 35 // Hash the mask to make sure no one else messes with them36 mask ^= id_hash;37 assert(mask == (id_hash ^ 0xCAFEBABA));38 32 39 33 // Force a preemption before the call to park … … 42 36 43 37 // Park this thread, 44 assert(mask == (id_hash ^ 0xCAFEBABA));38 sout | id | "Parking" | i; 45 39 park(); 46 assert(mask == (id_hash ^ 0xCAFEBABA)); 47 48 // Reset the hash and recheck it 49 mask ^= id_hash; 50 assert(mask == 0xCAFEBABA); 40 sout | id | "Unparked" | i; 51 41 } 52 42 }
Note: See TracChangeset
for help on using the changeset viewer.