Различие в многопоточности между Java и C / C ++

Я читал несколько советов, что реализация многопоточности во многом зависит от целевой ОС, над которой вы работаете. И наконец, ОС обеспечивает многопоточность. Например, Linux имеет стандартную реализацию POSIX, а windows32 - другой способ.

Но я хочу знать основные отличия на уровне языков программирования. C, кажется, предоставляет больше возможностей для синхронизации, таких как Mutex, блокировки чтения-записи, блокировка записи, семафоры Posix.

Но в Java,Я знаю, что мы можем использовать синхронизированные работы, такие как Mutex? И некоторые другие высокоуровневые API, такие как AtomicXX и volatile. Но я не нашел ничего похожего на блокировку записи и блокировку чтения-записи. Это слабая сторона языка Java? Или это жертва за пересечение платформы?

Также я хочу знать, является ли это основной причиной того, что все веб-серверы, такие как nginx и DB, такие как oracle, написаны на C / C ++?

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

РЕДАКТИРОВАТЬ:

Пол и Джеспер уже сообщили, что Java поддерживает все подобные классы блокировки, такие как C / C ++ после JDK1.5. Но если возможно, мне все же хотелось бы, чтобы кто-нибудь мог объяснить более подробно, почему Java обеспечивает достаточную поддержку, мы все еще не можем найти чистый Java «оракул».

РЕДАКТИРОВАТЬ:

Также я хочу добавить кое-что интересное, что я узнал на сайте developer.com от Насира Хана. Общие сведения о многопоточности Java и блокировках чтения-записи .

Некоторая тема в нем.

  • Взаимодействие разделяемой основной память с локальным потоком память,
  • Значение «синхронизация» относительно этого взаимодействия и взаимное исключение.
  • Уточните различие блокировка объекта и ресурсы, которые он охраняет.

РЕДАКТИРОВАТЬ:

Из FileLock JavaDocs

Блокировки файлов удерживаются от имени всей виртуальной машины Java. Они не подходят для управления доступом к файлу несколькими потоками в одной виртуальной машине.

Блокировка файлов в Java точно такая же, как и в C / C ++.

ОБНОВЛЕНИЕ
Я нахожу еще одну интересную область для сравнения:
в C ++, есть что-то вроде

atomic x, y;


в JAVA, у нас также есть AtomicInteger . Это одно и то же?

8
задан Clark Bao 1 September 2011 в 00:25
поделиться