【问题标题】:Static Methods and Multi-Threading静态方法和多线程
【发布时间】:2023-04-09 22:31:01
【问题描述】:

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

【问题讨论】:

    标签: c# multithreading static


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        可能,是的。

        想象一下:

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

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-19
            • 1970-01-01
            • 1970-01-01
            • 2011-01-24
            • 1970-01-01
            相关资源
            最近更新 更多