名前空間
変種
操作

tss_delete

提供: cppreference.com
< c‎ | thread
ヘッダ <threads.h> で定義
void tss_delete( tss_t tss_id );
(C11およびそれ以降)

tss_id の表すスレッドローカルストレージを破棄します。

デストラクタが tss_create によって登録されている場合、それは呼ばれません (それらは thrd_exit またはスレッド関数から戻ることによってスレッドが終了したときにのみ呼ばれます)。 tss_delete の呼び出しが行われる前に tss_id を使用するすべてのスレッドが必要なすべてのクリーンアップを行うことを保証するのははプログラマの責任です。

他のスレッドが tss_id に対するデストラクタを実行している間に tss_delete が呼ばれた場合、これが紐付けられたデストラクタの呼び出し回数を変更するかどうかは未規定です。

呼び出し元スレッドがデストラクタを実行している間に tss_delete が呼ばれた場合、 tss_id に紐付けられたデストラクタがこのスレッド上で再び実行されることはありません。

目次

[編集] 引数

tss_id - 以前に tss_create によって返され、まだ tss_delete によって削除されていない、スレッドローカルストレージのキー

[編集] 戻り値

(なし)

[編集] ノート

この関数と同等の POSIX の関数は pthread_key_delete です。

tss_delete がデストラクタを呼ばない理由は、通常、 (スレッド終了時に呼ばれる) デストラクタは、そのデストラクタが処理する値が元々 (tss_set によって) 設定されたのと同じスレッドで実行されることが意図されており、その値やそのスレッドから見える別のスレッドローカルデータに依存している可能性があるためです。 tss_delete を実行するスレッドは他のスレッドの TSS にアクセスすることができません。 仮に tss_id に紐付けられた各スレッドの所有する値に対してデストラクタを呼ぶことができたとしても、 tss_delete は、各スレッドのその TSS の値がヌルかどうかを調べるためだけに、すべてのスレッドに対して同期する必要があったでしょう (デストラクタは非ヌルの値に対してのみ呼ばれます)。

[編集]

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.26.6.2 The tss_delete function (p: 386)