Domi.Zhang
Domi.Zhang

Reputation: 1695

Execute static method in multithreads

Suppose I have a class like below:

public static class Foo
{
    public static int Do(int original)
    {
        int result=original + 1;
        return result;
    }
}

public class Bar
{
    public void Invoke()
    {
        int result=Foo.Do(1);
    }
}

Anyone can tell me how it be invoked in CLR? All we know that CLR is a virtual machine base on stack. An instance which would invoke Foo.Do() method has its own Call Stack. It push a int arg to Stack , and then call Foo.Do() method. I'm woudering whether few instances in multithreads invoke Foo.Do() would disturb each others? Every instance has a copy of Foo.Do() or rather?

Upvotes: 0

Views: 71

Answers (3)

Rohit Sharma
Rohit Sharma

Reputation: 6490

Perphas you should look at ThreadLocal API so you can have a thread specific storage. In your case as Reed suggested, it should not matter as there is no shared state but if there is any, it will matter as static storage is shared between threads until unless it is ThreadLocal

Upvotes: 0

Ken Wayne VanderLinde
Ken Wayne VanderLinde

Reputation: 19339

Each thread has its own call stack set up. So when you call a function in one thread, the stack is changed only for that thread. Other threads can call whatever other functions they want, without affecting each other (aside from shared state, but that's another issue. The important thing is that the stack isn't shared).

Upvotes: 1

Reed Copsey
Reed Copsey

Reputation: 564333

I'm woudering whether few instances in multithreads invoke Foo.Do() would disturb each others? Every instance has a copy of Foo.Do() or rather?

In this case, each instance would be fine. There is no data shared between the separate threads, since Invoke and Foo.Do do not rely on any other shared state.

The main issues with multiple threads occur when you're trying to share data between the individual threads. At that point, you need to take care to synchronize the access to the shared data.

Upvotes: 1

Related Questions