My question is about order of execution guarantees in C# (and presumably .Net in general). I give Java examples I know something about to compare with.
Without having read anything about .NET memory model, I can assure you .NET gives you at least those guarantees (i.e. lock behaves like an acquire an unlock like a release), since they are the weakest guarantees that are useful.