tss_delete
|
ヘッダーで定義
<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)