I have a class object whose functions can be called from different threads. 

It is possible to get into a situation where Thread1(T1) is calling destructor,  

whereas Thread(T2) is executing some other function on the same object.

Let's say T1 is able to call the destructor first, then what happens to the code running in T2?  

Will it produce a crash or since the object is already destroyed, the member function will stop running? 

Will taking a mutex lock at entry and unlocking at exit of all class functions ensure that there is no crash in any kind of race that will happen between destructor and member functions? 

Appreciate your help!