2010-01-14 2 views
1

Je suis en train d'apprendre Java, et je trouve que les docs/livres Java mettent un fort accent sur la synchronisation. J'ai lu pas mal de C# docs/books, et vous ne voyez pas beaucoup d'emphase sur ce sujet.Est-ce que C# et java ont les mêmes problèmes/concepts de synchronisation?

Est-ce que C# gère différemment le verrouillage/la synchronisation, ou les choses fonctionnent-elles différemment en tant qu'application Web (pools d'applications, iis, conteneurs clr verus/jvm/tomcat)?

Répondre

7

lock et synchronized sont globalement les mêmes, même si elles sont mises en œuvre un peu différemment - en particulier en C# serrure est juste du sucre syntaxique pour les appels vers Monitor.Enter/sortie, alors qu'en Java il n'y a pas d'équivalent de la bibliothèque.

C# n'a pas de méthodes synchronisées, bien que vous puissiez utiliser [MethodImpl(MethodImplOptions.Synchronized)] pour obtenir le même résultat. (Je pense qu'il y a quelques différences subtiles, mais elles sont globalement les mêmes.) Je ne suggérerais pas d'utiliser ceci dans les deux langues, cependant - verrouiller les verrous privés à la place. L'autre support de bibliothèque de concurrence dans .NET et Java est plus éloigné - les primitives de Object.wait/notify/notifyAll et de Monitor.Wait/Pulse/PulseAll sont similaires, mais le support de niveau supérieur est assez différent. Les modèles de mémoire sont subtilement différents - si vous n'essayez pas de travailler sans verrouillage, ils sont assez proches, mais le code sans verrouillage correct serait différent en .NET et en Java.

Vous ne savez pas exactement comment répondre à votre point d'application Web ...

+0

En réalité, C# possède des méthodes synchronisées. http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx – SLaks

+0

Pas dans la langue - il y a un support d'attribut, certes, mais ça ne fait pas partie du langage. Éditera. –

Questions connexes