【发布时间】:2023-04-09 22:31:01
【问题描述】:
如果有一个只有静态方法(没有属性、字段或其他任何东西)的静态类并且有多个线程同时访问这些方法,会有什么问题吗?
【问题讨论】:
标签: c# multithreading static
如果有一个只有静态方法(没有属性、字段或其他任何东西)的静态类并且有多个线程同时访问这些方法,会有什么问题吗?
【问题讨论】:
标签: c# multithreading static
只要没有共享状态或外部资源,那么:没有任何风险。您提到了“无字段”等,这很好 - 只要它们不间接谈论共享状态(也许通过一些在这种情况下不是线程安全的常见参数,或者通过它调用的一些其他实用方法,它们以混乱的方式共享状态),你应该没问题。
【讨论】:
是的,可以。这取决于您的方法是如何编写的。现在,如果只有静态方法,理论上这意味着完全可重入的代码没有问题。
【讨论】:
可能,是的。
想象一下:
class Logger
{
WriteToLogs(string msg)
{
// Write data to file1
...
// Write data to file2
...
}
}
现在假设您有多个线程试图同时调用 WriteToLog()。在 thread1 完成写入日志文件之前调度 thread2 会发生什么?在这种情况下,您最终可能会出现各种数据损坏。
静态类和方法本身并不提供任何形式的线程同步、锁定等。这是由您设计和实现的。
【讨论】:
是的,例如单例实现可以是静态的,但它们必须实现诸如double checked locking 之类的机制来防止多线程问题。
【讨论】: