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

Был полдень, когда Джон собирался в офис и сказал своей жене Шахане, что придет к 5 часам вечера. Он сказал ей, чтобы она к тому времени оставила чай наготове.

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

Она почувствовала удовлетворение и пошла спать на несколько часов, прежде чем приехал ее муж. Пока она спала, их служанка приходила и выполняла свои обычные домашние дела.

Выполнив задания, она почувствовала усталость и решила выпить чашку чая. Обычно она спрашивает шахану, прежде чем использовать что-нибудь из кухни, но, поскольку шахана спала, она продолжала делать себе чашку чая.

Она увидела, что на кухне есть все необходимое для приготовления чая. Чай был готов за несколько минут. Она выпила и ушла.

До этого момента история выглядела довольно простой, но проблема начинается сейчас.

Шахана проснулась и, так как она была уверена, что каждого ингредиента достаточно для приготовления чая, начала его заваривать.

В перерывах между приготовлением она поняла, что сахара там нет.
О, МОЙ БОГ !!

ЧТО ОНА ДЕЛАТЬ СЕЙЧАС?

Именно здесь вступает в действие концепция TOCTOU (ВРЕМЯ ПРОВЕРКИ ДО ВРЕМЕНИ ОБНОВЛЕНИЯ).

ЧТО ТАКОЕ TOCTOU?

Википедия утверждает, что

При разработке программного обеспечения время проверки и время использования (TOCTTOU или TOCTOU, произносится как «TOCK тоже») - это класс программной ошибки, вызванной изменениями в системе между проверкой условия (например, учетных данных безопасности) и использованием результатов этой проверки. Это один из примеров состояния гонки.

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

Насколько актуален приведенный выше пример?

Если мы увидим приведенный выше пример, shahana и maid - это два процесса, которые пытаются получить доступ к общему ресурсу, который является сахаром.

Такая же ситуация может возникнуть в среде параллельного программирования, когда к одному ресурсу (объекту / переменной) обращается и модифицируется более чем один процесс.

Операционная система может приостановить выполнение запущенного процесса и позволить другому процессу использовать ЦП в течение некоторого времени.

Теперь может случиться так, что новый процесс также изменяет тот же самый ресурс, к которому обращался предыдущий процесс, и, следовательно, вероятность возникновения состояния гонки !!

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