If the destructor changes some global data (for example, a global counter, etc.) or some shared resource, you need a mutex. Otherwise, protecting the destructor as such means its design problem. In no case should a thread attempt to delete an object when the object is being used by another thread.
source
share