Гибридный SpinLock / Mutex в Java - PullRequest
       46

Гибридный SpinLock / Mutex в Java

0 голосов
/ 17 января 2019

Есть ли в Java аналог InitializeCriticalSectionWithSpinCount ? Он реализует гибридный мьютекс . У меня проблема с отображением слишком большого количества потоков, тратящих время в методе LockSupport.park (), в то время как блокировка очень коротких частей кода с интенсивными вычислениями выполняется либо с помощью ReentrantLock, либо с синхронизацией (блокируемый код отнимает малозаметную часть общего времени выполнения на одном ядре). Вот класс, который значительно помогает моему делу, интересно, если я выбрал неправильный путь.

    public class ReentrantLockWithSpin extends ReentrantLock {
        private final int _spinCount;
        ReentrantLockWithSpin() {
            _spinCount = 1000;
        }
        ReentrantLockWithSpin(int spinCount) {
            _spinCount = spinCount;
        }
        @Override
        public void lock() {
            for (int spin = 0; spin != _spinCount; spin++) {
                if (super.tryLock())
                    return;

                Thread.yield();
            }

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