Replace 'volatile' with thread synchronisation
'volatile' is neither necessary nor sufficient for thread synchronisation e.g. in the scheduler. For one, read/write order is preserved only amongst other volatile reads/writes (cf. http://goo.gl/oBwjgZ - signal is set before the count is updated). For another, there's no guarantee of memory ordering - although this may be less visible on x86 vs. other platforms. This is distinct from other 'benign' causes of inter-run variation.
All 'volatile' qualifiers should be removed, and all cross-thread access should be suitably protected (some of it already is).