...you can have mutexes on individual blocks rather than the whole thing. Also some reads and writes can occur at the same time.
Is there currently in your implementation a way to know to which block an item belongs to (or to get the size of its block, which I guess comes down to the same), i.e. to know which mutex should be considered. If not, could that be a future feature?
There's no way currently, I'd be more inclined to implement a separate 100% threadsafe version specifically - for both performance reasons and to not expose unnecessary details to the end user.
It's a shame actually that the chunk-size is not user-settable (as per the standard from what I understand) for a std::deque or boost::deque, the latter with a chunk size of 512b last time I looked. I always use the boost one... maybe on Windows (with VC) you should test against the boost::deque instead, in order to get some sensible data...
Might be a good idea for a future test, but I think the GCC results cover it more-or-less for now- plus it's good for people to know how terrible some of MS/Dinkumware's implementations are :)
I see your implementation gives control over the first block on construction (and the rest then follows the growth policy), NICE! I like it!
Yes, it also gives control to maximum block size, which might be of use in some streaming applications where the cache size is known, such as games, or in memory-constrained environments. Plus I've just finished creating a proper reserve function - though it shouldn't be online for another few days-