5.: Das dürfte wirkungslos sein, da die CriticalSection scheinbar pro Objekt existiert. So würde zwar jeder Thread das Lock setzen, aber kein anderer würde sich daran stören.
Die könnte man als class var speichern und dafür im class contructor initialisieren und im class destructor wieder freigeben.