C プログラミング言語とNPTL 2.6を使用して、マルチスレッド モジュラー アプリケーションを開発しています。プラグインごとに、POSIX スレッドが作成されます。問題は、各スレッドが独自のスタック領域を持っていることです。デフォルトのスタック サイズはユーザーの選択に依存するため、場合によっては大量のメモリが消費される可能性があります。
不必要なメモリの使用を防ぐために、次のようなものを使用して、各スレッドを作成する前にスタック サイズを変更しました。
pthread_attr_t attr;
pthread_attr_init (&attr);
pthread_attr_getstacksize(&attr, &st1);
if(pthread_attr_setstacksize (&attr, MODULE_THREAD_SIZE) != 0) perror("Stack ERR");
pthread_attr_getstacksize(&attr, &st2);
printf("OLD:%d, NEW:%d - MIN: %d\n", st1, st2, PTHREAD_STACK_MIN);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
/* "this" is static data structure that stores plugin related data */
pthread_create(&this->runner, &attr, (void *)(void *)this->run, NULL);
EDIT I: pthread_create() セクションが追加されました。
これは期待どおりに機能しませんでした。によって報告されたスタック サイズpthread_attr_getstacksize()
は変更されましたが、アプリケーションの合計メモリ使用量 (ps/top/pmap 出力から) は変更されませんでした。
旧:10485760、新:65536 - 最小:16384
ulimit -s MY_STACK_SIZE_LIMIT
アプリケーションを開始する前に使用すると、期待される結果が得られます。
私の質問は次のとおりです。
1-) アプリケーションの起動後 (もちろんスレッドを作成する前) に (デフォルトの) スレッドスタックサイズを変更する移植可能な (UNIX バリアント間の) 方法はありますか?
2-) すべてのスレッドに同じスタック領域を使用することは可能ですか?
3-) あまり苦労せずにスレッドのスタックを完全に無効にすることは可能ですか?