Re-entrant locks in C# Re-entrant locks in C# multithreading multithreading