静态方法和线程

时间:2010-01-04 09:56:36

标签: c# multithreading

我在MSDN论坛上提出了一个问题,但得到了两个相反的答案。总的来说,我很想知道线程如何与静态类一起工作。如果我的代码同时从10个线程调用此(下面)静态方法,它是否是线程安全的?我的意思是,代码如何在幕后流动?每个线程是否在其自身内部执行代码(就像我认为它对非静态类执行)或者它与静态方法不同,并且因为它的静态,所有线程都试图到达代码并发生冲突?谢谢!

public static class A
{

    static void Method(object parameter)
    {
       SqlCeConnection = .....
    }
}

指向MSDN问题的链接:Here

PS:我很抱歉由于IE页面错误我无法点击“添加评论”或“答案”,Jon Skeet的答案很好(通常如此:)

2 个答案:

答案 0 :(得分:6)

与非静态类完全相同。静态不会真正影响任何东西 - 除了静态方法通常期望是线程安全的。它们不是自动线程安全的,但您应该确保以线程安全的方式实现它们。

如果代码不使用任何共享状态,则应该没问题。是的,没有任何锁定,所有线程可以同时执行相同的方法。

答案 1 :(得分:0)

一个很好的例子可以是单例模式。在这里你只需要一个给定类的单个实例,并且可以通过使构造函数为私有并给出一个静态方法或属性来访问实例来确保它。以下代码片段突出显示: -

class MyClass
{
private MyClass()
{

}

public static MyClass Instance
{
    get
    {
        lock(typeof(MyClass))
        {
            if(__instance == null)
                __instance = new MyClass();
        }
        return __instance;
    }
}

}

由于“Instance”方法被标记为静态(线程一致访问),但在多线程环境中,您需要手动处理它(使用锁定)。