Атомарная инструкция: Как другой поток может обновить значение, когда выполняются инструкции сравнения и обмена?
Насколько я понимаю, любые атомарные инструкции (compare_and_swap, test_and_test, fetch_and_add) выполняются как одна инструкция. Хотя они включают в себя несколько циклов / операций ЦП, они невидимы для потока / процесса. Если поток выполняет любую такую элементарную инструкцию, никакому другому потоку не разрешается изменять / получать доступ к любым значениям (ячейкам памяти / регистрам), связанным с такой элементарной командой.
Если это так, то почему в википедии http://en.wikipedia.org/wiki/Compare-and-swap указано, что если значение тем временем было обновлено другим потоком, запись не удалась бы.?
Как другой поток может обновить значение, пока выполняется инструкция Compare_and_swap в одном потоке?
1 ответ
Это своего рода запутанная формулировка. Это действительно, что запись не пройдет сразу. Обычно способ написания кода означает, что запись будет заблокирована, пока не закончится другой поток. Сказать, что запись не удастся, было бы неверно.