静态方法和多线程

时间:2011-02-24 08:16:14

标签: c# multithreading static

静态类只有静态方法(没有属性,字段或其他东西)并且有多个线程同时访问这些方法会有任何问题吗?

4 个答案:

答案 0 :(得分:5)

只要没有共享状态或外部资源,那么:没有任何风险。你已经提到“没有字段”等,这很好 - 只要它们不是间接谈论共享状态(也许是通过一些在这种情况下不是线程安全的常见参数,或者通过它调用的一些其他实用程序方法,它们以凌乱的方式共享状态),你应该没问题。

答案 1 :(得分:0)

是的,可以。这取决于你的方法是如何编写的。现在,如果只有静态方法,理论上这意味着完全可重入的代码没有问题。

答案 2 :(得分:0)

可能,是的。

想象:

class Logger
{
    WriteToLogs(string msg)
    {
        // Write data to file1
        ... 

        // Write data to file2
        ...
    }
}

现在想象你有多个线程试图同时调用WriteToLog()。在thread1完成写入日志文件之前调度thread2会发生什么?在这种情况下,您最终可能会遇到各种数据损坏。

静态类和方法本身并不提供任何形式的线程同步,锁定等。这是您设计和实现的。

答案 3 :(得分:0)

是的,例如,单例实现可以是静态的,但是它们必须实现诸如double checked locking之类的机制来防止多线程问题。