Служит ли этот 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 ответ

Решение

Вероятно, он пытается отложить уничтожение, пока другой поток не разблокирует мьютекс и не оставит другую функцию-член.

Однако это не помешает другому потоку снова вызывать эту функцию после снятия блокировки в деструкторе.

Должно быть больше взаимодействия между потоками (которые вы не показываете), чтобы этот код имел смысл. Тем не менее, подумал, это не кажется надежным кодом.

Другие вопросы по тегам