我想让一个线程等待另一个线程破坏特定对象。我想过以某种方式实现它:
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 我可以从没有锁定它的线程中解锁互斥锁,对吗?第二种选择是否会受到任何虚假唤醒的影响?