考虑以下代码(类的一部分):
void MyClass::foo() {
//...
mutex_.lock();
if (state_ == first) {
mutex_.unlock();
thread_ = boost::shared_ptr<boost::thread>(new boost::thread(boost::bind(&MyClass::bar, this)))
}
mutex_.unlock();
//...
}
void MyClass::bar() {
//...
while (true) {
//...
mutex_.lock();
if (state_ == last) {
mutex_.unlock();
state_ = first;
break;
}
mutex_.unlock();
//...
}
}
此代码确保每当thread_
被指定为指向新线程时,前一个线程就已经完成(或者,在第一次,根本没有启动)。
此代码是否可以防止内存泄漏/是否有我错过的内容?我不确定已经完成的线程是否需要使用delete
解除分配。