Разница между Java атомного целого и C # Interlocked.Increment метод - PullRequest
12 голосов
/ 27 мая 2011

Мне просто интересно, есть ли разница между тем, как вы увеличиваете статическую переменную в Java и C # в поточной среде?

В Java вы используете atomic int: s для выполнения этой операции, а в C # вы используетеInterlocked.Incement (ref yourVar)

Я имею в виду не код, который вы пишете, а то, как он на самом деле блокирует память и выполняет фактический прирост.

Ответы [ 2 ]

9 голосов
/ 27 мая 2011

Операция с блокировкой не блокирует память, а скорее выдает префикс LOCK инструкции в зависимости от операции.Это приводит к тому, что процессор устанавливает блокировку шины, поэтому только инструкция выполняется один раз.Далее вы можете посмотреть следующую статью

2 голосов
/ 27 мая 2011

В случае Java - «как это работает» зависит от набора инструкций платформы исполнения. Я читал (ранее сегодня, в ожидании бесконечного обновления ОС), что классы x86 AtomicXxx реализованы с использованием инструкции Compare и Swap (CAS).

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