サンプルコード。std :: unique_ptrのSTLコンテナからのfind()のスレッドセーフ
class Obj
{
public:
void doSome(void)
{
std::cout << "Hello World!" << std::endl;
}
};
std::unordered_map<int, std::unique_ptr<Obj>> map;
// insert -- done with single thread and before find()
map[123] = std::move(std::unique_ptr<Obj>(new Obj));
// find -- run from multiple threads
auto search = map.find(123); // <=== (Q)
if (search != map.end())
{
search->second->doSome();
}
(Q)
を実行している複数のスレッドがある場合は、// map.find(123)とセクションを見つけるどのようにスレッドセイフティは?
はmap.find(123)は常にすべてのスレッドでOBJを見つけるのだろうか? 検索 - > secondが他の誰かに割り当てられていない限り、
注:関数から返されたもの(変数名なしのもの)は移動しないでください。それは役に立たない。 –
非const関数も同時に呼び出されない限り、標準ライブラリクラス( 'find'など)の' const'メンバ関数を呼び出すことは大丈夫です。 –