For parallel_flat_hash_map, calling extract(Key) on elements with the same key from multiple threads at once appears to lead to an assertion and undefined behavior regardless of mutex/lock type being used.
Assertion happens in function:
void erase_meta_only(const_iterator it) :
assert(IsFull(*it.inner_.ctrl_) && "erasing a dangling iterator");
Is this expected? Or am I misusing the class? It is the class implementation itself which leaves the iterator dangling, so I can't see any leverage on my side. I would have expected as graceful behavior in such a situation, that the concurrent extract(Key) of same element simply returns an empty node handle as if the element never existed in the first place.
For parallel_flat_hash_map, calling extract(Key) on elements with the same key from multiple threads at once appears to lead to an assertion and undefined behavior regardless of mutex/lock type being used.
Assertion happens in function:
void erase_meta_only(const_iterator it) :
assert(IsFull(*it.inner_.ctrl_) && "erasing a dangling iterator");
Is this expected? Or am I misusing the class? It is the class implementation itself which leaves the iterator dangling, so I can't see any leverage on my side. I would have expected as graceful behavior in such a situation, that the concurrent extract(Key) of same element simply returns an empty node handle as if the element never existed in the first place.