マルチスレッドのプログラミング

独自のスタックを構築する

スレッドスタックのサイズを指定するときは、呼び出される関数に必要な割り当てを計算してください。これには、呼び出し手続きで必要とされる量、局所変数、情報構造体が含まれます。

デフォルトスタックと少し違うスタックが必要になることがあります。たとえば、スレッドでデフォルトスタックサイズを超えるスタック空間が必要になる場合です。また、少しわかりにくいケースですが、デフォルトスタックが大きすぎる場合もあります。何千ものスレッドを生成する場合、デフォルトスタックでは合計サイズが数 G バイトにもなるため、仮想メモリーが足りず、それだけのスタック空間を扱えない可能性があります。

スタックサイズの上限は明らかであることが多いのですが、下限はどうでしょうか。スタックにプッシュされるスタックフレームを、その局所変数などを含めて、すべて扱えるだけのスタック空間が必要です。

スタックサイズの絶対最小値を取得するには、マクロ PTHREAD_STACK_MIN を呼び出します。マクロ PTHREAD_STACK_MIN は、NULL 手続きを実行するスレッドに必要な量のスタック空間を返します。実用的なスレッドに必要なスタック空間は最小スタックサイズより大きいので、スタックサイズを小さくするときは十分注意してください。