Namespaces
Variants

tss_delete

From cppreference.net
ヘッダーで定義 <threads.h>
void tss_delete ( tss_t tss_id ) ;
(C11以降)

tss_id で識別されるスレッド固有ストレージを破棄します。

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

tss_delete が他のスレッドによる tss_id のデストラクタ実行中に呼び出された場合、関連するデストラクタの呼び出し回数が変更されるかどうかは未規定です。

呼び出しスレッドがデストラクタを実行中に 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の値がそのスレッドでnullかどうかを調べるだけでも(デストラクタは非null値に対してのみ呼び出される)、すべてのスレッドと同期を取る必要があります。

参考文献

  • C17規格 (ISO/IEC 9899:2018):
  • 7.26.6.2 tss_delete関数 (p: 282)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.26.6.2 tss_delete関数 (p: 386)