Threading and static methods in C#
这里以一个无意义的扩展方法为例:
1 2 3 4 5 6 7 8 9 10 | public static class MyExtensions { public static int MyExtensionMethod(this MyType e) { int x = 1; x = 2; return x } } |
说一个执行线程完成到并包括以下行:
1 | x = 2; |
处理器然后上下文切换,另一个线程进入相同的方法并完成该行:
1 | int x = 1; |
假设第一个线程创建和分配的变量 "x" 与第二个线程创建和分配的变量 "x" 位于单独的堆栈上,我是否正确,这意味着此方法是可重入的?
是的,每个线程都有自己独立的局部变量。即使被多个线程同时调用,这个函数也总是返回 2。
是的,这是一个正确的评估。
的调用之间共享
很简单,是的。静态方法仅意味着可以在没有对象的情况下调用该方法。方法中的局部变量仍然是局部的。