已知有事務存儲器TS(ISO/IEC TS 19841:2015)在實驗C++:聲明爲transaction_safe
Is it enough to declare a function as transaction_safe, so they can be used thread-safe?爲什麼訂購std :: map並且訂購std :: set沒有被邀請進行transaction_safe?
而且operator[]
僅對容器: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關聯容器[締]
23.4.4類模板地圖[圖]
23.4.4.1類模板地圖概述[map.overview]
在23.4.4.1 [map.overview],添加 「transaction_safe」 到聲明的開始和結束構件的所有變體的 函數和 聲明size,max_size和empty。
但爲什麼沒有宣佈operator[]
作爲transaction_safe
爲std::map
和std::set
(但也有unordered_map
/unordered_set
)?
爲什麼有加「transaction_safe」爲std::map
和std::set
的begin
和end
成員函數的所有變量的聲明?
迭代begin
和end
是非常必要的std::array
,std::vector
或std::list
,但不能用於關聯數組。在關聯數組中需要find或find-and-modify函數:find
,at
,insert
,erase
和operator[]
。沒有他們,這是沒有道理的。
爲什麼訂購std :: map並且訂購std :: set沒有被邀請做transaction_safe?
我強烈懷疑'unordered_meow'的'operator []'無條件的事務安全是一個缺陷。 –