microoptimising atomic memory ops