[PATCH] Remove volatile qualifiers from mt_allocator
Paolo Carlini
pcarlini@suse.de
Wed Aug 30 13:53:00 GMT 2006
Richard Guenther wrote:
>You cannot only protect the __block->_M_thread_id != __thread_id with
>a mutex, you would need to protect all _M_used readers/writers, but
>then...
>
>
Right, at allocation time in particular.
>>Also, I think Benjamin benchmarked *all* the counters atomic, and the
>>performance penalty was again big. We could try only _M_used atomic and now
>>(with the new atomicity.h) that would affect only actually multithreaded code.
>>Maybe we can go that route... What do you think?
>>
>>
>...this would be the way to go. And yes, it would of course fix the
>issue (making the _M_used elements atomic). One could think of more
>trickier ways to avoid the use of atomic ops in the case where
>__block->_M_thread_id == __thread_id by having two _M_used counters
>per thread, one atomic and changed from threads != __thread_id, one
>changed only from __thread_id which also merges both counters at
>reclaim time. But this would change class layout.
>
>
Note that we are going to change class layout anyway (and probably we
can live with that because that isn't the default allocator, etc...),
because currently _M_used is an array of size_t and would become an
array of int. Actually, on 64-bit machines I bet the "total" layout
would change less with a *pair* of ints as you are suggesting for
completely different reasons.
Less radical than two counters, we could access the atomic counter
always atomically at allocation time; atomically at deallocation time
when __block->_M_thread_id != __thread_id; normally at deallocation time
when __block->_M_thread_id == __thread_id. I think this is also fine and
a tad better...
Paolo.
More information about the Libstdc++
mailing list