別のスレッドによる特定のオブジェクトの破棄をスレッドに待機させたい。私はそれを次のように実装することを考えました:
class Foo {
private:
pthread_mutex_t* mutex;
pthread_cond_t* condition;
public:
Foo(pthread_mutex_t* _mutex, pthread_cond_t* _condition) : mutex(_mutex), condition(_condition) {}
void waitForDestruction(void) {
pthread_mutex_lock(mutex);
pthread_cond_wait(condition,mutex);
pthread_mutex_unlock(mutex);
}
~Foo(void) {
pthread_mutex_lock(mutex);
pthread_cond_signal(condition);
pthread_mutex_unlock(mutex);
}
};
ただし、waitForDestruction メソッドで誤ったウェイクアップを処理する必要があることはわかっていますが、「this」は既に破棄されている可能性があるため、何も呼び出すことはできません。
私の頭をよぎった別の可能性は、条件変数を使用せず、コンストラクターでミューテックスをロックし、デストラクタでロックを解除し、waitForDestruction メソッドでロック/ロック解除することでした-これは非再帰的ミューテックスで機能し、iirc iロックしていないスレッドからミューテックスをロック解除できますよね?2 番目のオプションは、誤ったウェイクアップの影響を受けますか?