Я читал несколько советов, что реализация многопоточности во многом зависит от целевой ОС, над которой вы работаете. И наконец, ОС обеспечивает многопоточность. Например, 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
.
Это одно и то же?