debug container mutex association
François Dumont
frs.dumont@gmail.com
Tue Sep 13 20:37:00 GMT 2016
Hi
When I proposed to change std::hash for pointers my plan was to use
this approach for the debug containers. So here is the patch leveraging
on this technique to avoid going through _Hash_impl to hash address and
get mutex index from it. I think it is obious that new access is faster
so I didn't wrote a performance test to demonstrate it.
Drawback is new exported symbols.
* include/debug/safe_base.h (_Lowest_power_of_two<>): New.
(_Safe_sequence_base): Make _Safe_iterator_base friend.
(_Safe_sequence_base::_M_detach_singular(size_t)): New.
(_Safe_sequence_base::_M_revalidate_singular(size_t)): New.
(_Safe_sequence_base::_M_swap(_Safe_sequence_base&, size_t)): New.
(_Safe_sequence_base::_M_get_mutex(size_t)): New.
(_Safe_iterator_base::_M_get_mutex(size_t)): New.
(_Safe_iterator_base::_M_attach(_Safe_sequence_base*, bool, size_t)):
New.
(_Safe_iterator_base::_M_detach(size_t)): New.
(_Safe_iterator_base(const _Safe_sequence_base*, bool)): Replace by...
(_Safe_iterator_base(const _Safe_sequence_base*, bool, size_t)):
...this.
(_Safe_iterator_base(const _Safe_iterator_base&, bool)): Replace by...
(_Safe_iterator_base(const _Safe_iterator_base&, bool, size_t)):
...this.
(~_Safe_iterator_base()): Delete.
* include/debug/bitset (bitset::_S_alignment()): New.
(bitset::reference::~reference()): New.
(bitset::reference::reference(const _Base_ref&, bitset*)): Adapt.
(bitset::reference::reference(const reference&)): Adapt.
* include/debug/safe_iterator.h (_Safe_iterator::_M_get_mutex()): New.
(_Safe_iterator::_Safe_iterator(const _Iterator&,
const _Safe_sequence_base*)): Adapt.
(_Safe_iterator::~_Safe_iterator()): New.
(_Safe_iterator::_M_detach()): New.
(_Safe_iterator::_M_attach(_Safe_sequence_base*)): Adapt.
* include/debug/safe_iterator.tcc: Remove trailing line.
* include/debug/safe_local_iterator.h (_Safe_local_iterator<>): Rename
_Sequence template parameter into _Container.
(_Safe_local_iterator::_M_get_mutex()): New.
(_Safe_local_iterator::_Safe_local_iterator(const _Iterator&,
const _Safe_sequence_base*)): Adapt.
(_Safe_local_iterator::~_Safe_local_iterator()): New.
(_Safe_local_iterator::_M_detach()): New.
(_Safe_local_iterator::_M_attach(_Safe_sequence_base*)): Adapt.
* include/debug/safe_sequence.h
(_Safe_sequence::_S_alignment()): New.
(_Safe_sequence::_Safe_sequence(_Safe_sequence&&)): New.
(_Safe_sequence::_M_get_mutex()): New.
(_Safe_sequence::_M_detach_singular()): New.
(_Safe_sequence::_M_revalidate_singular()): New.
(_Safe_sequence::_M_swap(_Safe_sequence&)): New.
* include/debug/safe_unordered_base.h
(_Safe_local_iterator_base(const _Safe_sequence_base*, bool)): Replace
by...
(_Safe_local_iterator_base(const _Safe_sequence_base*, bool, size_t)):
...this.
(_Safe_local_iterator_base(const _Safe_local_iterator&, bool)): Replace
by...
(_Safe_local_iterator_base(const _Safe_local_iterator&, bool, size_t)):
...this.
(_Safe_local_iterator_base::~_Safe_local_iterator_base()): Delete.
(_Safe_local_iterator_base::_M_attach(_Safe_sequence_base*, bool,
size_t)): New.
(_Safe_local_iterator_base::_M_detach(size_t)): New.
(_Safe_unordered_container_base(_Safe_unordered_container_base&&)):
Delete.
(_Safe_unordered_container_base::_M_swap(
_Safe_unordered_container_base&, size_t)): New.
(_Safe_unordered_container_base::_M_attach_local(_Safe_iterator_base*,
bool, size_t)): New.
(_Safe_unordered_container_base::_M_detach_local(_Safe_iterator_base*,
size_t)): New.
* include/debug/safe_unordered_container.h
(_Safe_unordered_container::_S_alignment()): New.
(_Safe_unordered_container::_Safe_unordered_container(
_Safe_unordered_container&&)): New.
(_Safe_unordered_container::_M_get_mutex()): New.
(_Safe_unordered_container::_M_swap(_Safe_unordered_container&)): New.
* src/c++11/debug.cc: Adapt.
* testsuite/23_containers/vector/debug/mutex_association.cc: New.
* config/abi/pre/gnu.ver: Add new symbols.
Tested under Linux x86_64.
François
-------------- next part --------------
A non-text attachment was scrubbed...
Name: debug_mutex.patch
Type: text/x-patch
Size: 44407 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20160913/752b50d9/attachment.bin>
More information about the Gcc-patches
mailing list