众所周知,Experimental C++ 中有事务内存 TS(ISO/IEC TS 19841:2015):将函数声明为 transaction_safe 就足够了,因此它们可以用于线程安全吗?
并operator[]
声明为transaction_safe
仅用于容器:std::vector
, std::unordered_map
, std::unordered_multimap
, std::unordered_set
, std::unordered_multiset
, std::deque
- 取自 n4514:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4514.pdf
23.4 关联容器[associative]
23.4.4 类模板图[map]
23.4.4.1 类模板地图概述[map.overview]
在 23.4.4.1 [map.overview] 中,将“transaction_safe”添加到 begin 和 end 成员函数的所有变体的声明以及 size、max_size 和 empty 的声明中。
但是为什么没有operator[]
声明transaction_safe
为std::map
and std::set
(但有 for unordered_map
/ unordered_set
)?
为什么要在 and 的所有变体begin
和end
成员函数的声明std::map
中添加“transaction_safe” std::set
?
迭代器begin
和对于, orend
是非常必要的,但对于关联数组则不是。在关联数组中需要查找或查找并修改函数:、、和。没有他们,这是没有意义的。std::array
std::vector
std::list
find
at
insert
erase
operator[]
为什么没有邀请订购 std::map 和订购 std::set 来制作 transaction_safe?