Я пытался найти ответ на вопрос.
https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/stl__map_8h-source.html
Вы можете увидеть карту STL Souce.
поиск find()
. Он находится в 497 строке, 524 линии. Код записывается как _M_t.find(__x);
Затем поиск _M_t
.
Найдено в 124 строке.
Это записано как _Rep_type _M_t;
Если для потока создается свойство _M_t
, оно может быть поточно-ориентированным.
Но я так не думаю.
Если 2 потока используют find
одновременно, они будут использовать _M_t
одновременно.
_Rep_type
подключен к _Rb_tree
.
Вы можете увидеть _Rb_tree
в источнике ниже.
https://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-4.1/stl__tree_8h-source.html
find()
сделать путешествие по дереву (см. Код ниже).
произойдет нежелательное изменение __x
и __y
.
01307 template<typename _Key, typename _Val, typename _KeyOfValue,
01308 typename _Compare, typename _Alloc>
01309 typename _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::iterator
01310 _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
01311 find(const _Key& __k)
01312 {
01313 _Link_type __x = _M_begin(); // Current node.
01314 _Link_type __y = _M_end(); // Last node which is not less than __k.
01315
01316 while (__x != 0)
01317 if (!_M_impl._M_key_compare(_S_key(__x), __k))
01318 __y = __x, __x = _S_left(__x);
01319 else
01320 __x = _S_right(__x);
01321
01322 iterator __j = iterator(__y);
01323 return (__j == end()
01324 || _M_impl._M_key_compare(__k,
01325 _S_key(__j._M_node))) ? end() : __j;
01326 }