- File:
-
- 1 edited
-
tests/concurrent/park/force_preempt.cfa (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tests/concurrent/park/force_preempt.cfa
ra254fa56 rb0c7419 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.