Andrew Troelsen in his book Pro C# 2008 and the .NET 3.5 Platform, Fourth Edition says while explaining newobj instruction from CLR page no. 248, first para third bullet
before returning the reference to the caller, advance the next object pointer to point to the next available slot on the managed heap
sounds like advance the next object pointer is winthin a lock block (or something similar) to make sure this pointer gets incremented correctly after every object creation on managed heap by all .net threads. Am i right or entirely wrong?
First of all this is an implementation detail. There are many ways to implement this, and a CLR implementation is free to choose whichever it likes.
A few possible implementations:
Interlocked.Exchange