use a sync/atomic instead of a mutex for speeeed
extracting scheduleDecrement so we can benchmark it individually