tss_delete
| ヘッダ <threads.h>で定義 |
||
| void tss_delete( tss_t tss_id ); |
(C11 以降) | |
tss_id で識別されるスレッドローカルストレージを破棄します。
tss_create によって登録されたデストラクタがあれば、それは呼び出されません(デストラクタはスレッド終了時にのみ、thrd_exit またはスレッド関数の復帰によって呼び出されます)。プログラマは、tss_id を認識しているすべてのスレッドが、tss_delete の呼び出し前に行うべきすべての必要なクリーンアップを実行したことを保証する責任があります。
他のスレッドが 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 の値がヌルであるかどうかを調べるためだけでも、すべてのスレッドと同期する必要があるでしょう(デストラクタはヌルでない値に対してのみ呼び出されます)。
[編集] 例
| このセクションは未完成です 理由: 例がありません |
[編集] 参照
- C17標準 (ISO/IEC 9899:2018)
- 7.26.6.2 The tss_delete function (p: 282)
- C11標準 (ISO/IEC 9899:2011)
- 7.26.6.2 The tss_delete function (p: 386)