Здравствуйте, kuda2004, Вы писали:
K>Здравствуйте, mkopachev, Вы писали:
M>>Здравствуйте, <Аноним>, Вы писали:
А>>>Пока не пришла в голову мысль о влиянии HT на приложение, я очень долго сидел в дебаггере и чесал репу, видя как, например, на пустом месте возникает access violation, причем другие потоки явно не влияют на указатель, по которому этот эксепшен происходит.
M>> Угу. Очень типичная проблема. Для начала проверь следующие грабли:
M>> — флажок IsMutliThread должен быть установлен (если нет — устанавливай его руками)
M>> — все указатели и переменные, для которых возможно кроспотоковое использование должны записываться не простым присваиванием, а с помощью функций типа InterlockedExchange — это гарантирует от проблемы рассинхронизации процессорных кэшей.
K>Честно говоря, необходимость использования Interlocked-фукнций для всех присваиваний в этом контексте по крайней мере сомнительна.
Для ВСЕХ переменных и не предлагается. Только для тех, которые могут изменяться и считываться разными потоками. Например, локальные переменные функций однозначно не могут быть использованы разными потоками, так как находятся в разных стеках.
Если переменная может изменяться одним потоком, а считываться другим, то это необходимомо.
С уважением Михаил Копачев
... << RSDN@Home 1.1.4 @@subversion >>