GNU/Linux >> Linux の 問題 >  >> Linux

Linux および gcc 4 での C++ の新しい演算子のスレッド セーフ

一般的に new operator はスレッド セーフです - ただし、STL と標準ライブラリへの呼び出しに対するスレッド セーフの保証は、標準によって管理されています - これは、それらがスレッドを認識しないという意味ではありません - 特定の操作に対して、スレッド セーフの非常に明確な保証が定義されている傾向があります。たとえば、読み取り専用の方法でリストを反復処理することは、複数のリーダーに対してスレッド セーフですが、リストを反復処理して更新を行うことはスレッド セーフではありません。ドキュメントを読んで、さまざまな保証が何であるかを確認する必要がありますが、それらはそれほど面倒ではなく、理にかなっている傾向があります.


私が使用したことのない概念について話している間、共有メモリを使用している場合は、POD タイプのみを使用し、placement new を使用することを確認する必要があることを言及する必要があると思います.

次に、共有メモリを使用している場合、共有メモリを通信層として使用して、スレッドではなく複数のプロセスを使用してメモリを割り当て、「何かを実行」している可能性があります。この場合、アプリケーションとライブラリのスレッド セーフは重要ではありません。ただし、重要なのは、共有メモリ割り当てを使用するすべてのスレッド セーフです。これは、多くのスレッドで 1 つのプロセスを実行する場合とは異なる状況です。この場合、new 演算子のスレッド セーフについて尋ねることは有効な懸念事項であり、そうでない場合は new を配置するか、独自のアロケーターを定義することで対処できます。 /P>

スレッドをサポートしているが、スレッド セーフ new を持たないプラットフォームを見つけるには、非常に苦労する必要があります。 .実際、new のスレッドセーフは (そして malloc ) が非常に遅い理由の 1 つです。

一方、スレッド セーフな STL が必要な場合は、スレッド対応コンテナーを持つ Intel TBB を検討してください (ただし、すべての操作がスレッド セーフであるとは限りません)。


Linux
  1. Linuxコマンドでの(!)記号または演算子の10の驚くべき不思議な使用法

  2. 7 Linux Grep OR、Grep AND、Grep NOT 演算子の例

  3. C/C++ (GCC/G++) を使用した Linux でのソケット プログラミングでのファイルの送受信

  1. Linuxでスレッドに名前を付ける方法は?

  2. Linux と Mac OSX を区別するための GCC/G++ のマクロ?

  3. LinuxでWaitForSingleObjectとWaitForMultipleObjectsは同等ですか?

  1. Linux 上の C++ が exit() や printf() などのコマンドを認識しない

  2. Windows および Linux での C++ コンパイル:ifdef スイッチ

  3. Linux で C++ を使用してシステムの日付と時刻を設定する