in my head there are three kinds of barriers: 1. compiler, do not move instructions across this barrier 2. caches, ensure that you've flushed any writes out to RAM by this point 3. CPU, do not re-order instructions across this barrier