Использование семафора для взаимного исключения - PullRequest
0 голосов
/ 01 мая 2020

Мы можем реализовать взаимное исключение в java с замком (intrinsi c lock или ReentrantLock):

Lock lock = new ReentrantLock();
  try {
            lock.lock();
           //do something
            }
        } finally {
            lock.unlock();
        }

или с семфором (1)

  Semaphore semaphore = new Semaphore(1);
        try {
            semaphore.acquire();
            //do soemthing
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            semaphore.release();
        }

Я вижу, что преимущество семафора здесь в том, что он переводит потоки в состояние WAITING, а блокировка переводит потоки в состояние BLOCKED (BLOCKED увеличивает нагрузку на планировщик). fromThisAnswer

Считается ли плохой практикой использование семафора для взаимного исключения? Должны ли мы всегда отдавать предпочтение замкам для взаимного исключения?

...