Описание тега concurrentmodification

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

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

общедоступные переменные доллары

add(amount):
   add amount to dollars
   sets dollars amount


withdraw(amount):
   subtract amount from dollars
   sets dollars amount

Если бы в этом примере псевдокода было запущено два потока, можно было бы добавить один к числу (от 100 до 101 доллара), одновременно выдав 100 долларов клиенту и установив для учетной записи значение 0, а затем установите для учетной записи 101 доллар.

Разные языки обрабатывают это по-разному, например, Java имеет синхронизацию(объект с блокировкой), GTK имеет gtk_threads_enter/leave для взаимодействия в одном потоке.