l_inc А как происходит чтение линейки? Атомарно? Тогда получается, что LOCK нужен только для поддержания атомарности при read-modify-write? Конечно, я использую не 'lock mov', а 'lock xchg'. Кастую leo в обсуждение!
Mika0x65 Насколько мне известно, да. Обычно невыравненные данные не используются там, где требуется атомарный доступ, поэтому обычно да. Но при доступе через границу линии кэша lock также должен форсировать атомарный доступ. Между lock xchg и xchg не должно быть функционального различия.
А, в таком аспекте я не рассматривал -- чтение на границе линеек кэша. Надо подумать, как там это все происходит. Выравнивание, это, конечно, хорошо, но не хочется всегда полагаться только на него. Насчет 'xchg' & 'lock xchg' здесь когда-то обсуждали. Я, правда, не совсем согласен с трактовкой dermatolog'а, но задуматься стоит. Хотя можно просто спросить в форуме Intel .
Mika0x65 Я ему тоже не поверил. Но ввиду его большего опыта решил не спорить. Ну оно в любом случае сложнее происходит даже из-за тех же механизмов поддержания когерентности, которые могут быть реализованы по-разному. Например, подгрузка линейки может быть реализована обращением к системной шине, а может обращением к ядру с грязной линейкой.
Угу, я как раз о них. Надо полагать, что алгоритмами особо никто и не делится, ибо коммерческая тайна.