2010-01-14 2 views
1

Я просто изучаю Java, и я обнаружил, что в документах/книгах Java особое внимание уделяется синхронизации. Я прочитал довольно много C# docs/books, и вы просто не видите, чтобы этот акцент был сделан на эту тему.Имеет ли C# и java те же проблемы/концепции синхронизации?

Выполняет ли C# блокировку/синхронизацию по-другому или что-то по-другому работает как веб-приложение (пулы приложений, iis, clr verus container/jvm/tomcat)?

ответ

7

и synchronized в целом одинаковы, хотя они реализованы несколько иначе - в частности, в C# блокировка - это просто синтаксический сахар для вызовов Monitor.Enter/Exit, тогда как в Java нет эквивалента библиотеки.

У C# нет синхронизированных методов, хотя вы можете использовать [MethodImpl(MethodImplOptions.Synchronized)] для достижения такого же эффекта. (Я думаю, что есть некоторые тонкие различия, но они в целом одинаковы.) Я бы не предложил использовать это на любом языке, однако, вместо этого блокируйте частные блокировки.

Другая поддержка библиотек параллелизма в .NET и Java отличается от других - примитивы Object.wait/notify/notifyAll и Monitor.Wait/Pulse/PulseAll похожи, но поддержка более высокого уровня довольно различна.

Модели памяти отличаются друг от друга - если вы не пытаетесь работать без блокировки, они достаточно близки, но правильный код без блокировки будет отличаться в .NET и Java.

Не знаю, как ответить на ваш вопрос веб-приложения ...

+0

На самом деле, у C# есть синхронизированные методы. http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx – SLaks

+0

Не на языке - есть поддержка атрибутов, правда, но это не часть языка. Будет редактировать. –

Смежные вопросы