Как я могу реализовать Java-подобную синхронизацию (мониторы) с помощью Win32 API? - PullRequest
1 голос
/ 06 октября 2008

Каждый объект Java (и его класс) имеет связанный монитор. В терминах pthread, монитор Java эквивалентен комбинации повторяющегося мьютекса и условной переменной.

Для блокировки Win32 API предоставляет объекты Mutex (которые являются реентерабельными, но тяжелыми) и критические секции (которые не реентерабельные, но легковесные) Он также предоставляет другие конструкции синхронизации, такие как семафоры и события, но не имеет явного понятия переменной условия.

Если бы я писал JVM, как я мог бы использовать эти концепции Win32 для реализации мониторов Java?

Ответы [ 3 ]

2 голосов
/ 11 февраля 2009

В Windows есть SignalObjectAndWait (), которая может использоваться очень похоже на ожидание переменной условия на мониторе. Вы можете использовать Событие (то есть Сброс) и Mutex, а затем использовать PulseEvent (), чтобы сделать эквивалент сигнализации условной переменной.

1 голос
/ 11 октября 2008
0 голосов
/ 06 октября 2008

Я предлагаю вам взглянуть на источник OpenJDK , чтобы увидеть, как был реализован класс ReentrantLock.

(я сам не проверял, поэтому не уверен в ответе).

блокировки util.concurrent реализованы с использованием собственного API.

...