Memory barriers ensure ordering of load/store commands.
Usually CPUs and compilers reorder these instructions for more efficient execution. Lock-free algorithms often require that perceived execution order be strict, that's when memory barriers or memory fences come in handy.
More detailed description in following articles:
Memory Ordering in Modern Microprocesors, Part 1 and Part 2
Ridiculous Fish's controversial article about using and abusing memory barriers. (and some bashing of this article just for a different POV)
Documentation with explanations on what memory barriers are used in linux kernel and why.
This page or section is a stub. You can help the wiki by accurately contributing to it.