A recent paper by Microsoft research has discovered a concurrency bug in the .Net JIT. They used the F# theorem prover to analyze the JIT il->x86 transformations which were previously thought to comply with the .Net memory model. These bugs show that writing correct concurrent (multi-threaded) code is hard - and in a multi-core world we need to find a way to provably write correct code.
"This discovery means that the current CLR JIT
compiler for the x86 platform is not correct; it will be ﬁxed in the
future by strictly emitting locked instructions for all volatile stores"