Какие операции называются неатомарными? Если можно с примером.
Ответ
Грубо - которые могут оказаться прерванными другим потоком.
Примеры? Ну, например
if (a) { f(a); }
Пока вы считали a, которое равно true, и собрались выполнять f(a), другой поток уже сделал a равным false :)
Или даже такая экзотика - в одном потоке вы присваиваете значение переменной из двух слов. Первое слово записалось, прерывание, другой поток читает из памяти нечто полузаписанное. Работает, записывает что-то свое. Тут снова управление возвращается к первому потоку, и он дописывает вторую половину нашей переменной...
Комментариев нет:
Отправить комментарий