Java中的混合SpinLock / Mutex

时间:2019-01-17 19:10:54

标签: java multithreading mutex spinlock

Java中是否有InitializeCriticalSectionWithSpinCount的类似物?它实现了hybrid mutex。我看到一个问题,看到在LockSupport.park()方法中有太多的线程花费时间,同时又用ReentrantLock或sync锁定了计算密集型代码的非常短的部分(被锁定的代码几乎无法测量单个内核上总运行时间的一部分)。这是一个对我的情况有很大帮助的课程,我想知道我是否走错了路。

    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();
        }
    }

0 个答案:

没有答案