DLIBランタイム環境でのマルチスレッドのサポート
DLIBランタイム環境は、2種類のロック(システムロックとファイルストリームロック)を使用します。ファイルストリームロックは、ファイルストリームの状態が更新されたときにガードとして使用され、フルライブラリ設定でのみ必要になります。以下のオブジェクトは、システムロックによってガードされます。
ヒープ(つまり
malloc、new、free、delete、realloc、callocが使用される場合)。Cファイルシステム(フルライブラリ設定でのみ使用可能)。ただし、ファイルストリーム自体を除きます。ストリームが開かれたり閉じられたときにファイルシステムが更新されます。つまり、
fopen、fclose、fdopen、fflush、freopenが使用されるときです。シグナルシステム(つまり
signalが使用されるとき)。一時ファイルシステム(つまり
tmpnamが使用されるとき)。C++静的記憶寿命を持ち、動的に初期化される関数ローカルオブジェクト。
C++ロケール ファセットのハンドリング
C++標準式のハンドリング
C++停止および予期しない事象のハンドリング
以下のライブラリオブジェクトはTLSを使用します。
TLSを使用するライブラリオブジェクト | 以下の関数が使用される場合 |
|---|---|
エラー関数 |
|
C++例外エンジン | 適用されません。 |
注記
printf/scanf(または任意の派生型)をフォーマッタとともに使用する場合、個々のフォーマッタは保護されますが、完全なprintf/scanfの呼び出しは保護されません。
マルチスレッドをサポートするランタイム環境でC++が使用される場合、コンパイラオプション--guard_callsを使用して、動的イニシャライザを持つ関数-静的変数が、複数のスレッドによって同時に初期化されないようにします。