Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       pthread_attr_setstack,  pthread_attr_getstack - スレッド属性オブジェクトのスタック属性の設
       定/取得を行う

書式

       #include <pthread.h>

       int pthread_attr_setstack(pthread_attr_t *attr,
                                 void *stackaddr, size_t stacksize);
       int pthread_attr_getstack(const pthread_attr_t *attr,
                                 void **stackaddr, size_t *stacksize);

       -pthread でコンパイルしてリンクする。

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       pthread_attr_getstack(), pthread_attr_setstack():
           _POSIX_C_SOURCE >= 200112L

説明

       pthread_attr_setstack() 関数は、 attr が参照するスレッド属性オブジェクトのスタックアドレス
       属性と  スタックサイズ属性をそれぞれ stackaddrstacksize で 指定された値に設定する。 こ
       れらの属性により、スレッド属性オブジェクト attr を使って  作成されるスレッドが使用すべきス
       タックの位置とサイズが指定される。

       stackaddr は、呼び出し側で割り当てた、大きさが stacksize バイトの バッファー内の指定できる
       最小のアドレスバイトを指すべきである。  割り当てられたバッファーのページは読み書き両方が可
       能なページとなっている べきである。

       pthread_attr_getstack() 関数は、 スレッド属性オブジェクト attr のスタックアドレス属性と ス
       タックサイズ属性をそれぞれ stackaddrstacksize が 指すバッファーに入れて返す。

返り値

       成功すると、これらの関数は 0 を返す。 エラーの場合、0 以外のエラー番号を返す。

エラー

       pthread_attr_setstack() は以下のエラーで失敗する場合がある。

       EINVAL stacksizePTHREAD_STACK_MIN   (16384)   よりも小さい。   システムによっては、
              stackaddrstackaddr + stacksize のアライメントが適切でない場合にも このエラーが
              発生する。

       POSIX.1 では エラー EACCES も規定されており、このエラーは stackaddrstacksize  で規定さ
       れるスタック領域に呼び出し側から読み書き両方のアクセスができない状況を表す。

バージョン

       これらの関数は glibc バージョン 2.2 以降で提供されている。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌─────────────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├─────────────────────────┼───────────────┼─────────┤
       │pthread_attr_setstack(), │ Thread safety │ MT-Safe │
       │pthread_attr_getstack()  │               │         │
       └─────────────────────────┴───────────────┴─────────┘

準拠

       POSIX.1-2001, POSIX.1-2008.

注意

       これらの関数は、スレッドのスタックが特定の場所に配置されることを保証  しなければならないア
       プリケーションのために提供されている。  ほとんどのアプリケーションでは、このようなことは必
       要なく、 これらの関数を使うのは避けるべきである。  (アプリケーションが単にスタックサイズだ
       けをデフォルトの値から変更する 必要がある場合には pthread_attr_setstacksize(3) を使うこと)

       アプリケーションが pthread_attr_setstack() を利用する際には、 スタックの割り当てに責任を持
       つ必要がある。 pthread_attr_setguardsize(3) を使って設定された guard  size  の値は無視され
       る。 必要と思われる場合は、アプリケーションが責任を持ってガード領域 (読み書 きが行われない
       ように保護された 1 個かそれ以上のページ) の割り当てを行い、 スタックオーバーフローの可能性
       に対処するようにする必要がある。

       stackaddr  に指定するアドレスは適切なアライメントとなっているべきである。 完全な移植性を持
       たせるためには、   ページ境界    (sysconf(_SC_PAGESIZE))    に揃えること。    割り当てには
       posix_memalign(3) を使うとよい。 たいていは、 stacksize はシステムのページサイズの倍数とす
       べきである。

       一つの attr を使って複数のスレッドを作成する場合、 pthread_create(3)  の次の呼び出しを行う
       前に、  呼び出し側でスタックアドレス属性を変更しなければならない。  さもなければ、複数のス
       レッドがスタックとして同じメモリー領域を  使おうとするため、訳の分からない状況が発生してし
       まう。

       pthread_attr_init(3) を参照。

関連項目

       mmap(2), mprotect(2), posix_memalign(3), pthread_attr_init(3),
       pthread_attr_setguardsize(3), pthread_attr_setstackaddr(3), pthread_attr_setstacksize(3),
       pthread_create(3), pthreads(7)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。