Служит ли этот unique_lock в dtor какой-либо цели?
Наткнулся на этот деструктор в кодовой базе, которую я отлаживал.
ManagerImpl::~ManagerImpl() {
// don't go away if some thread is still hitting us
boost::unique_lock<boost::mutex> l(m_mutex);
}
Действительно ли это служит какой-либо полезной цели в многопоточной программе? Это похоже на клудж.
Я предполагаю, что идея состоит в том, чтобы отложить уничтожение, если другой поток вызывает функцию, которая блокирует мьютекс, но эффективно ли это при этом? Сегфоты ElectricFence заставили бы меня поверить в обратное.
1 ответ
Вероятно, он пытается отложить уничтожение, пока другой поток не разблокирует мьютекс и не оставит другую функцию-член.
Однако это не помешает другому потоку снова вызывать эту функцию после снятия блокировки в деструкторе.
Должно быть больше взаимодействия между потоками (которые вы не показываете), чтобы этот код имел смысл. Тем не менее, подумал, это не кажется надежным кодом.