Is it possible to shim the C# lock function, to add diagnostics?
I would love to see whenever a lock is taken or released, the lock count, and the managed thread id of the thread taking the lock.
In C++ you write your own Mutex class and provide your own lock function, and you can add in those kind of diags yourself.
Is it possible to wrap the lock function or shim the function to provide diagnostics?
Thanks in advance for any assistance.
You can't shim the lock statement but you certainly can implement your own lock class that delegates to the Monitor class (which underlies lock).
The C# spec 8.12 says that a lock statement is "precisely equivalent" to:
bool __lockWasTaken = false;
try {
System.Threading.Monitor.Enter(x, ref __lockWasTaken);
...
}
finally {
if (__lockWasTaken) System.Threading.Monitor.Exit(x);
}
So there is no way to "hook in". I wonder, though, what happens if you define your own method System.Threading.Monitor.Enter... You will never get the compiler to use it because it is an ambiguous name. But the spec does not say what happens then.
You can probably install a custom CLR host or profiler and use native APIs to shim locks. That's a nuclear option, though.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With