C# 中的线程和静态方法

发布于 2024-09-07 23:43:33 字数 418 浏览 7 评论 0原文

下面是一个无意义的扩展方法作为示例:

public static class MyExtensions
{
    public static int MyExtensionMethod(this MyType e)
    {
        int x = 1;
        x = 2;

        return x
    }
}

假设一个执行线程完成并包括以下行:

x = 2; 

然后处理器进行上下文切换,另一个线程进入相同的方法并完成该行:

int x = 1;

我假设变量“x”是正确的吗?第一个线程创建和分配的变量位于第二个线程创建和分配的变量“x”的单独堆栈上,这意味着该方法是可重入的?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

同尘 2024-09-14 23:43:33

是的,每个线程都有自己单独的局部变量。即使被多个线程同时调用,该函数也始终返回 2。

Yes, each thread gets its own separate local variable. This function will always return 2 even if called by multiple threads simultaneously.

小…红帽 2024-09-14 23:43:33

是的,这是一个正确的评估。 x 是方法局部变量,不会在 MyExtensionMethod 的调用之间共享。

Yes, that's a correct assessment. x is a method-local variable, and won't be shared between invocations of MyExtensionMethod.

赏烟花じ飞满天 2024-09-14 23:43:33

很简单,是的。静态方法仅意味着可以在没有对象的情况下调用该方法。方法内的局部变量仍然是局部的。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文