26/08/2026

Многопоточность. Взаимодействие потоков

курс stepic

Взаимодействие потоков

Взаимодействие - это передача изменения одного и того же объекто несколькими потоками.

  • У потоков общий Heap

  • Можно перердать в два потока ссылку на один объект

  • Потоки смогут менять общий объект и взаимодействовать через него

Память не предоставляет механизмов безопасно этот процесс осуществить.

Возможные проблемы при таком взаимодействии:

1) Thread Interface - потеря результата

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

2) Memory Consistency Errors - ошибочное состояние общей памяти

Если есть некий объект поля которого должны быть согласованы, нет гарантий что в любой момент обращаясь к полям этого обьякта мы получим консистентное состояние. Например, один поток движется по массиву а другой добавляет данные в массив.

race condition - когда за общий ресурс борятся несколько потоков и они мешают друг другу