Состояние гонки в Java (и ParaSail!)

Этот блог был написан моим другом, который спросил о моей футболке. Если вы знаете меня за пределами экрана, вы знаете, что я обычно ношу много ботаных футболок. В тот день на мне было что-то вроде этого:

Объясняя шутку, я понял, что это будет интересная тема для обсуждения в моем блоге. Итак, приступим к делу:

Что является состоянием гонки?

Состояние гонки - это когда система пытается выполнить несколько операций одновременно, но из-за природы системы, для правильного выполнения операции должны выполняться в правильной последовательности.

Практический пример:

Подумайте о простом выключателе света. В некоторых домах есть несколько выключателей, подключенных к общему потолочному светильнику. Когда используются эти типы цепей, положение переключателя не имеет значения. Если свет горит, перемещение любого переключателя из его текущего положения выключает свет. Точно так же, если свет выключен, то перемещение любого переключателя из его текущего положения включает свет.

Имея это в виду, представьте, что могло бы произойти, если бы два человека попытались включить свет, используя два разных переключателя в одно и то же время. Одна инструкция может отменить другую, или два действия могут отключить автоматический выключатель.

Как это работает в Java:

Java по своей природе многопоточная. По сути, это означает, что один набор кода может использоваться несколькими процессорами на разных этапах выполнения.

В нашем примере мы видели два разных переключателя, воздействующих на один и тот же источник света. Это пример многопоточности. Ниже мы можем увидеть более подробный пример, относящийся к вычислениям.

В приведенном выше примере в текстовый процессор вводится несколько потоков, которые вводятся в ЦП. Вы можете заметить состояние гонки, когда печатаете в текстовом редакторе или текстовом редакторе. По мере ввода вы можете увидеть небольшую красную полоску под словом, написанным правильно. Это яркий пример состояния гонки в многопоточной системе.

Теперь я мастер многопоточности. Пришло время увидеть состояние гонки в действии!

Многопоточность - мощный и полезный способ реализации кода. Это одна из причин, по которой многие инженеры-программисты предпочитают Java. Однако, как у каждой розы есть свои шипы, так и у мощных процессов есть свои ошибки.

Пример состояния гонки:

Эта переменная экземпляра c увеличивается и уменьшается, поэтому каждый поток должен оставлять ее в том состоянии, в котором она была изначально, т.е. если c в начале равна нулю, при увеличении ее значение будет равно 1 и его уменьшение снова сделает его нулевым.

Когда вы запустите этот код, переменная c будет выводить разные ответы для каждого потока.

Состояние гонки обычно плохое. Как правило.

Есть случай, когда условия гонки действительно могут быть полезными. Чтение блога на ParaSail, условно названном Параллельный язык спецификации и реализации, - это «новый язык программирования, предназначенный для продуктивной разработки параллельных программных систем с высокой степенью интеграции (критичные к безопасности, с высокой степенью защиты). ”

В блоге, написанном Такером Тафтом, обсуждается «условие преднамеренной гонки в параллельном цикле ParaSail».

Тафт объясняет, что это может показаться «относительно распространенной парадигмой при выполнении параллельного поиска, когда вы хотите остановиться, как только, например, будет найден интересующий элемент в просматриваемой структуре данных, и нет необходимости в другие темы, чтобы продолжить работу ».

Условия гонки могут быть опасными, но их можно использовать и во благо.

Я написал всю эту запись в блоге, чтобы объяснить шутку? Возможно. Но, держу пари, вы кое-чему научились.

Источники:

Если вы хотите купить рубашку (теперь, когда вы можете объяснить это всем своим друзьям), щелкните здесь.