• 締切済み

pthreadのスタックサイズ設定取得方法

Linux(CentOS)で、C言語にてpthreadによるマルチスレッドプログラミングをしています。 各スレッドのスタックサイズを増やす方法と 該当スレッドのスタックサイズを取得する方法をおしえていただけませんでしょうか? 調べてみた限りでは、pthread_attr_setstacksizeが使えそうな気もしましたが、 設定方法がわかりませんでした。 また設定が正しく行われてるかを確認する方法がわかりませんでした。 Linuxのコマンドで実行中のプログラムのスタックサイズを取得するもの とかないのでしょうか? よろしくお願い致します。

みんなの回答

回答No.1

参考URL参照(次ページにはサイズ取得)。

参考URL:
http://docs.oracle.com/cd/E19455-01/806-2732/attrib-45427/index.html

関連するQ&A

  • pthread_attr_tへの値の代入について

    スレッドを作成する際に、 属性としてPTHREAD_CREATE_DETACHEDを指定したいのですが、 その際pthread_attr_tをどのように設定したらよいかわかりません。 現在書いているコードは pthread pt; pthread_attr_t* attr; pthread_attr_init(attr); pthread_attr_setdetachstate(attr,PTHREAD_CREATE_DETACHED); if (pthread_create(&pt,attr,NULL,NULL) != 0){ perror("thread_create()"); exit(1); } 上記のようなものです。(スレッド作成部分のattr以外の 引数は適当です) これでコンパイルすると 警告: 変数 attr には値が代入されていません. と、警告が出てしまいます。 これを解消するにはどう修正したらよいのでしょうか?

  • スレッドのスケジューリングポリシーと優先順位の設定(pthread)

    こんにちは。今、マルチスレッドのプログラミングをする上で困っていることがあります。 pthread(スレッド)の優先順位をどのように変更するのかがわかりません。 また、メインの優先順位も変更したいのですがよくわかりません。 現在、↓のようにやっていますが、変更されていないような気がします。 間違っているようであればご指摘やアドバイスをいただけるとうれしいです。 宜しくお願いします。 ------------------------- int main(){ int policy; pthread_t th; pthread_attr_t th_att; struct sched_param scp; /* pthread の優先順位の変更 */ scp.sched_priority = 50; /* この値は適当です…*/ policy = SCHED_FIFO; pthread_attr_init(&th_att); pthread_attr_setschedpolicy(&th_att,policy,&scp) /* mainの優先順位の変更*/ scp.sched_priority = 30; /* この値は適当です…*/ pthread_setschedparam(pthread_self(),policy,&scp) pthread_create(&th,&th_att,(void*)func,NULL); . . .

  • スレッドの作成について(pthread_create関数)

    以下のプログラムをLinuxで実行するとpthread_create関数の戻り値が『1』となり、errno変数には『4』が入ってしまいます。(どちらにも『0』が入っててほしい) 何がやりたいのかというと、子スレッドのプライオリティを優先指定にして、子スレッドが生成されることを確認したいだけなのですが。。。 (下のプログラムじゃきっと本質的には確認できたことにはならないとおもいますが。。。) 何故pthread_create関数の戻り値が『1』となり、errno変数には『4』が入ってしまうかわかる方、どなたかご教授願えませんでしょうか? -------------------------------ここから------------------------------- #include <pthread.h> #include <errno.h> void *test2( void * ); int main ( int argc, char **argv ) { int iThCreateRes=0; pthread_attr_t t_attr; int bRet=0; pthread_t szThreadHandle; errno = 0; pthread_attr_init( &t_attr ); pthread_attr_setdetachstate( &t_attr, PTHREAD_CREATE_JOINABLE ); pthread_attr_setschedpolicy( &t_attr,SCHED_RR ); pthread_attr_setinheritsched( &t_attr, PTHREAD_EXPLICIT_SCHED ); pthread_attr_setscope( &t_attr, PTHREAD_SCOPE_PROCESS ); iThCreateRes = pthread_create( &szThreadHandle, &t_attr, test2, (void *)777 ); if( iThCreateRes == 0 ) { } return ( bRet ); } void *test2( void *iParam ) { return (void*)0; } -------------------------------ここまで-------------------------------

  • cloneのスタック管理

    cloneのパラメータでスタックのアドレスを渡しますがその際のスタック管理で良い方法はないでしょうか? 条件: 1.cloneで生成されるスレッドは多数存在する。 2.各スレッドは不定期に消滅する。 3.他のスレッドからも消滅させられる。 現在以下の2つのパターンで検討していますが、他に良い方法はないでしょうか? 1.生成される度にmalloc()でスレッド用のスタックエリアを確保し、そのアドレスをcloneのパラメータとして渡す。消滅時にそのパラメータを使用しfree()で解放する。(但し、他のスレッドから消滅させられる場合にスタックのアドレスが分からない。) 2.生成されると思われる個数分のスタックエリアをcalloc()で確保し、そのインデックス値をcloneのパラメータとして渡す。消滅時にそのパラメータを使用しスタックエリアをクリアし次にcloneで生成されるスレッド用として使用する。(但し、他のスレッドから消滅させられる場合にスタックのインデックス値が分からない。) pthread_create()の場合、スタックの管理はどうなっているのでしょうか? Linuxでのスレッドについて詳しいHP、参考書等知っていれば教えて下さい。

  • VCでのスタックサイズ

    VC++2005のスタックサイズのデフォルトは知らないのですが プロパティ  構成プロパティ   C/C++    コマンドライン 追加のオプション /F 1000000000 953MBのスタックで約1Gのスタックはできるのでしょうか? また、実行ファイル(exeファイルから)スタック領域がわかる方法があるのでしょうか?

  • クラス内でのpthread_createに関して

    C言語初心者です。 下記のようなソースにて、クラス内でのスレッドを行うことが目的です。 しかし、下記のpthread_createにてコンパイルエラーとなります。 キャストエラーのようなのですが、キャスト方法がわかりません。 初歩的な質問で、大変申し訳御座いませんが、ご教授頂けませんでしょうか? ################################################################ #include <stdio.h> #include <pthread.h> // Testクラス class Test{ private: // スレッド処理 void testThread() { printf("### THREAD START ###\n"); return; } public: // スレッド開始 void threadStart() { // スレッド生成戻り値 int status; // スレッド pthread_t thread; // スレッド生成 status = pthread_create( &thread, NULL, (void*(*)(void*))testThread, NULL ); // スレッド生成結果 if ( status != 0 ) { printf("ERR!! pthread_create NG\n"); } return; } }; // メイン実行 int main(int argc, char *argv[]) { // Testクラスオブジェクト Test test; printf("### TEST START ###\n"); test.threadStart(); printf("### TEST E N D ###\n"); return 0; } ################################################################ 宜しくお願い致します。 以上です。

  • マルチスレッドプログラミングの参考書

    スレッドやプロセスなどの意味は理解しているつもりです。 実際プログラミングをする技術を身につけたいと思っていますが おすすめの、勉強(参考)となる書籍はありますでしょうか? プラットフォームはLinux系です。 pthreadやselectを使用できればよいです。 最終的にどんなことがしたいかといいますと マルチスレッド対応したソケットプログラムを 作ってみたいのです。 シングルスレッドであれば、ある程度作れるのですが マルチスレッドではどのように作成していいのか・・・ 参考になりそうなHPでもいいのでよろしくお願いします。

  • VC++でプログラムから現在のスタックサイズを得る方法

    Microsoft VC++でC/C++プログラム内部で現在のスタックサイズを得る方法がありましたらお願いします。 可能ならC/C++のコードで、無理ならインラインアセンブラでも構いません。 デバッグモード時にはスタックチェックしているので、 どこかに情報はあると思います。 目的は、やたらスタック浪費しているので、該当関数、メソッドを探すためです。 人が作った大きなプログラムなのでソースから探すのが大変なので・・。

  • 「インクルードファイル 'pthread.h' をオープンできない」というエラー

    今簡単なサーバ・クライアントシステムをつくっていて、大まかな骨組みはできました。 で、骨組みができたところで先生が、「並列処理を可能にするため、スレッドを使ってみましょう。スレッドについては次回までに各自勉強してきておいてください。」といったので、帰ってからインターネットで調べてみた結果、マルチスレッドの例みたいなプログラムのソースをいくつか見付けました。 私はスレッドというものを全く知らなかったので(というかそもそもC言語についてもそれほど詳しくないのですが)、とりあえずそのソースをコピーしてどのような動作をするのか確認しようと思いました。 ところがコンパイルするときに、 「インクルードファイル 'pthread.h' をオープンできない」 というエラーがでてきてしまうのです。 ちなみに家で使っている CPad for Borland C++Compiler と、 学校で使っている Microsoft Visual C++ (だったかな?) の両方でコンパイルしてみましたが、両方とも同じエラーが起こります。 どうすればいいのでしょうか?

  • マルチコア上のLinux環境にて、スレッドを任意のコアに割り当てることは可能か?

    こんにちは。cstepと申します。 Intel Core 2 Quad(コア数x4)のマシン上の ReaHat Linux 9(Kernel 2.4.20-8)環境で、pthread(glibc-2.3.2-11.9, NPTL 0.29, gcc 3.2.2)を使用したマルチスレッド・プログラミングをしています。 各スレッドのコア割り当てを(OSの自動スケジューリングではなくて)手動で固定的に割り当てることは可能でしょうか? 可能な場合それを実現するAPIや実現方法をご教授いただけますでしょうか。 例えば、8つのスレッドからなるプログラムだとした場合、 ・スレッド1と5 → コア1に割り当て ・スレッド2と6 → コア2に割り当て ・スレッド3と7 → コア3に割り当て ・スレッド4と8 → コア4に割り当て というふうに、各スレッド(1~8)を任意のコア(1~4)に固定的に割り当てて動作させたいと考えております。 Windowsの場合は、SetThreadAffinityMask() または SetThreadIdealProcessor() といったAPIを使うことで上記の要求は可能かと思いますが、Linuxでの方法が分からず、質問させていただきました。 よろしくお願い致します。

専門家に質問してみよう