.NET 4 includes new concurrent data structures. The Bag and Dictionary collections have obvious applications but I cannot see any use for the Queue and Stack data structures. What are people using these for?
Also, I’ve noticed that the design based upon linked lists incurs a lot of allocation and that destroys scalability. This is surprising given that the sole purpose of these collections is multicore programming. Is this an inherent limitation or are they just badly implemented?
Addressing the second part of your question, you are quite right that although concurrent collections implementations in .Net 4.0 are trying to be lock-free, they still sit on top of non-lock-free memory allocation subsystem.
Memory management is a bane of all lock-free data structures: here is a nice presentation on the state of the art:
http://sysrun.haifa.il.ibm.com/hrl/ISMM2009/program.html#7
The bottom line is that this area is very much research-in-progress, so probably not yet quite ready to be included in wide-deployment production platforms such as .Net.