2016-04-11 5 views
2

C++標準では、std :: allocatorを使用してさまざまな要素を構築することがスレッドセーフであることを保証していますか?例:異なる要素を構築するときに 'std :: allocator <T> :: construct'はスレッドセーフですか?

// main thread 
std::allocator<T> alloc; 
auto *p = alloc.allocate(2); 

// thread1 
alloc.construct(p); 

// thread2 
alloc.construct(p + 1) 

また、異なる要素に対してstd :: allocator :: destroy thread-safeはありますか?

ありがとうございます!デストラクタを除き

答えて

5

20.7.9.1アロケータメンバー[allocator.members]

1、デフォルト・アロケータのメンバ関数は、これらの部材への同時呼び出しの結果として、データ・レース(1.10) を導入してはなりません異なるスレッドからの機能これらの関数への呼び出しは、特定の記憶単位を割り当てるか、または割り当てを解除する呼び出しは、1つの合計順序で発生し、そのような各呼び出しは、次の割り当てがある場合は、その順序で実行されます。

そうです、std::allocator<T>constructdestroyへの同時呼び出しはスレッドセーフであることが保証されています。

+0

ありがとうございます!それは役に立ちます –

関連する問題