торая не будет прерываться (ме

Автор admin Пятница, 26 июня 2009 11:32

торая не будет прерываться (механизм многопоточности не может прервать работу потока в середине выполнения команды микропроцессора). Иначе говоря, атомарные операции не прерываются механизмом многопоточности и не нуждаются в защите стражей1. Более того, если бы мы переместили выборку count в temp, удалили yield() и просто увеличивали count напрямую, скорее всего, блокировка вообще не понадобилась бы, поскольку операция инкремента тоже обычно является атомарной2. К сожалению, стандарт С++ не гарантирует атомарности всех этих операций. Хотя такие операции, как возврат и инкремент int, почти наверняка являются атомарными на большинстве компьютеров, утверждать это с полной уверенностью нельзя. А раз гарантий нет, значит, нужно предполагать самое худшее. Иногда программисты проверяют атомарность операций на конкретном компьютере (обычно на основании анализа ассемблерного кода) и пишут код, основанный на этих предположениях. Такой подход всегда рискован, и применять его не рекомендуется. О полученных результатах слишком легко забыть. Следующий программист может ошибочно предположить, что программа легко перен


Комментарии закрыты.