コンテナー#
oneAPI スレッディング・ビルディング・ブロック (oneTBB) は、高度な同時実行コンテナークラスを提供します。これらのコンテナーは、生の Windows* または Linux* スレッドで使用することも、タスクベースのプログラミングと組み合わせることもできます。
同時実行コンテナーを使用することで、複数のスレッドがコンテナに同時にアクセスし、安全に項目を更新できるようになります。一般的な C++ STL コンテナーでは同時更新が許可されていないため、同時に変更しようとするとコンテナーが破損することがあります。STL コンテナーをミューテックスでラップして、コンテナー上で一度に 1 つのスレッドのみを操作できるようにすることで、同時アクセスを安全に行うことができますが、このアプローチでは同時実行性が失われるため、並列スピードアップが制限されます。
oneTBB が提供するコンテナーは、次のいずれかまたは両方の方法で、より高いレベルの同時実行性を実現します。
細粒度のロック: 複数のスレッドは実際にロックの必要がある部分だけをロックしてコンテナー上で動作します。異なるスレッドが異なる部分にアクセスする限り、同時に処理できます。
ロックフリー技術: 異なるスレッドが、干渉する他のスレッドの影響を考慮して修正します。
高度に同時実行されるコンテナーにはコストがかかることに注意してください。通常、STL コンテナーよりもオーバーヘッドが高くなります。同時実行性の高いコンテナーの操作は、STL コンテナーよりも時間がかかる場合があります。したがって、高度な同時実行性を持つコンテナーは、それによって可能になる追加の同時実行性によるスピードアップがシーケンシャルのパフォーマンスを上回る場合に使用します。
警告
C++ のほとんどのオブジェクトと同様に、コンテナー・オブジェクトのコンストラクターまたはデストラクターは、同じオブジェクトに対する別の操作を同時に呼び出すことはできません。そうしないと、結果として生じる競合により、未定義のオブジェクトに対して操作が実行される可能性があります。