iostream 標準ライブラリー内に宣言されているすべてのクラスは再入可能であり、 スレッド・セーフティーの確保のために単一ロックを使用し、同時にデッドロックの発生を防いでいます。 しかしながらマルチプロセッサー・マシンでは、稀ではありますが、2 つの別のスレッドが共用ストリーム・オブジェクトへのアクセスを同時に試みる、または ストリーム・オブジェクトがロックを掛けながら入力 (例えばキーボードから) を 待つなどの機会があります。 ライブ・ロック (livelock) の可能性を避けるには、コンパイル時に下記のマクロを使用して、入力ストリーム・オブジェクト、 出力ストリーム・オブジェクト、または両方のロッキングを使用不可に設定します。
xlC_r -D__NOLOCK_ON_INPUT -D__NOLOCK_ON_OUTPUT a.C
export XLCPP_NOLOCK_ON_INPUT=1
ストリーム・オブジェクトのロッキングを使用不可にする場合、環境変数を使用することを推奨します。
ただし、入力オブジェクトまたは出力オブジェクトのロッキングを使用不可にする場合に、 ストリーム・オブジェクトがスレッド間で共用される場合、ソース・コード内で適切なロッキング・メカニズムを提供する必要があります。 それを行わないと、振る舞いは未定義で、データ破壊またはアプリケーション 異常終了の可能性があります。