4 подписчика
Thread Safe — когда пора начать об этом думать
Понятие Thread Safe имеет множество определений, но суть у них одна:
если переменную изменяют несколько потоков, то результат изменения должен быть предсказуемый
(если b = 1, и мы дважды вызываем b++, то ожидаем увидеть b = 3 — это и есть предсказуемость)
Что может пойти не так?
Во-первых, по умолчанию потоки работают с переменной не в общей памяти, а создают свою локальную копию. А после всех манипуляций с объектом внутри потока возвращают объект в общую память
То есть другие потоки смогут увидеть изменения в объекте только после завершения этапа работы первого потока
Во-вторых, один поток может взять переменную и начать изменять ее. Например, была строка var s = "Big", а на выходе должна получится строка s = s + "Hot"
Но пока первый поток не закончил изменение s, второй поток тоже считал s. И решил сделать из нее s = s + "Dog"
Получается, что мы хотели прибавить к "Big" строки "Hot" и "Dog", а получим на выходе не "BigHotDog", а "BigHot" или "BigDog" или "BigDogHot" — результат непредсказуем
Ответ на заголовок поста:
пора начинать разбираться в многопоточности, как только в проекте появляется два и более потоков, работающих с общими переменными
....
с чего стоит начать, если хочешь понять эту вашу многопоточность вдоль и поперек?
1 минута
12 августа 2022