我刚刚学习 Java,我发现 Java 文档/书籍非常强调同步。我已经阅读了相当多的 c# 文档/书籍,但您只是看不到对这个主题的重视程度。
c# 处理锁定/同步的方式是否不同,或者作为 Web 应用程序(应用程序池、iis、clr 与容器/jvm/tomcat)的工作方式是否不同?
最佳答案
lock
和 synchronized
大致相同,尽管它们的实现方式有所不同 - 特别是,在 C# 中,lock 只是调用 Monitor.Enter/的语法糖退出,而在 Java 中没有等效的库。
C# 没有同步方法,尽管您可以使用 [MethodImpl(MethodImplOptions.Synchronized)]
来实现大致相同的效果。 (我认为存在一些细微差别,但它们大致相同。)我不建议在任何一种语言中使用它,但是 - 锁定私有(private)锁。
.NET 和 Java 中的其他并发库支持相去甚远 - Object.wait/notify/notifyAll 和 Monitor.Wait/Pulse/PulseAll 的原语相似,但更高级别的支持相当不同。
内存模型略有不同 - 如果您不尝试在没有锁定的情况下工作,它们就足够接近了,但是正确的无锁代码在 .NET 和 Java 中会有所不同。
不太确定如何回答您的网络应用问题...
关于c# - c# 和 java 是否有相同的同步问题/概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2064432/