Служит ли этот unique_lock в dtor какой-либо цели? - PullRequest
2 голосов
/ 17 июня 2019

Обнаружен этот деструктор в кодовой базе, которую я отлаживаю.

ManagerImpl::~ManagerImpl() {
    // don't go away if some thread is still hitting us
    boost::unique_lock<boost::mutex> l(m_mutex);
}

Действительно ли он служит какой-либо полезной цели в многопоточной программе?Это похоже на kludge.

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

1 Ответ

4 голосов
/ 17 июня 2019

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

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

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

...