pthread_key_create
デストラクタ関数を渡しながらの使い方が気になりました。
私はこのようなものが欲しかった:
static ComplexObject foo;
void workoncomplex(void *) {
foo.dosomestuff();
}
static pthread_key_t pthreadkey;
void function_called_by_threads() {
pthread_key_create(&pthreadkey, workoncomplex)
}
明らかに、私はかなりの詳細を省略しました。
メインスレッドではないスレッドの場合、これは明らかに問題ありません(ロックなどが提供されます)。スレッドが停止するたびに、workoncomplex
関数が呼び出されてfoo
オブジェクトを操作します。
私の質問は、これはメインスレッドに有効ですpthreadkey
か?デストラクタの呼び出しはスレッドの終了時に発生するのは明らかですが、スタティックが破棄される前に実行されることが保証されていますか?もしそうなら、私はメインスレッドにいるかどうかを確認し、すぐに戻る必要がありますか?または、すべてのスレッドを同じように扱い、静的オブジェクトがまだ存在していると想定することはできますか。