Я знаю, я знаю, название моего сообщения может показаться провокационным, так как
boost :: mutex специально не выставляет блокировку / разблокировку (чтобы избежать мертвых блокировок).
Однако в документации по этим аспектам (по меньшей мере) достаточно краткая документация, поэтому я спрашиваю, может ли кто-нибудь помочь мне в следующем случае использования.
Предположим, у вас есть класс Foo, который имеет:
- деструктор, который занимает некоторое время, чтобы завершить
- метод, который вызывается отдельным потоком, но не должен вызываться при уничтожении
class Foo
{
public:
virtual ~Foo()
{
//Time consuming operations here
}
//Method called by a timer belonging to a distinct class
void OnTimer()
{
//Other time consuming stuff. Should not be called during destruction !
}
};
Я попытался (но безуспешно) реализовать версию на основе boost :: mutex
//boost::mutex implementation
class Foo
{
public:
Foo()
{
}
virtual ~Foo()
{
{
boost::mutex::scoped_lock lock(mDisposingMutex);
//Time consuming operations here
}
}
//Method called by a timer belonging to a distinct class
void OnTimer()
{
{
//Imaginary code here: mutex::locked() method is private !!!
if ( ! mDisposingMutex.locked())
return;
}
//Other time consuming stuff. Should not be called during destruction !
}
private:
boost::mutex mDisposingMutex;
};
Я совершенно не прав? Может кто-нибудь сказать мне, как это должно быть сделано с boost :: mutex?
Спасибо!