У c # и java одни и те же проблемы / концепции синхронизации? - PullRequest
1 голос
/ 14 января 2010

Я только изучаю Java и обнаружил, что документы и книги по Java уделяют большое внимание синхронизации. Я прочитал довольно много c # документов / книг, и вы просто не видите особого внимания к этой теме.

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

1 Ответ

7 голосов
/ 14 января 2010

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

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

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

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

Не совсем уверен, как ответить на точку вашего веб-приложения ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...