Here is a meaningless extension method as an example:
public static class MyExtensions
{
public static int MyExtensionMethod(this MyType e)
{
int x = 1;
x = 2;
return x
}
}
Say a thread of execution completes upto and including the line:
x = 2;
The processor then context switches and another thread enters the same method and completes the line:
int x = 1;
Am I correct in assuming that the variable "x" created and assigned by the first thread is on a separate stack to the variable "x" created and assigned by the second, meaning this method is re-entrant?
Quite simply, yes. A static method only means that the method can be called without an object. The local variables within the method are still local.
Yes, that's a correct assessment.
x
is a method-local variable, and won't be shared between invocations ofMyExtensionMethod
.Yes, each thread gets its own separate local variable. This function will always return 2 even if called by multiple threads simultaneously.