Итак, программа на Delphi. Если HyperThreading включен, программа вылетает с ошибкой Access Violation или вообще без ошибки. Как повезёт. Если HyperThreading выключен - всё работает идеально Программу пишу на делфи, проблема возникает в местах, похожих на это: mov eax, [eax] mov [edx], eax mov [eax+4], edx <- Access Violation Приложение многопоточное, обращение к общим переменным синхронизирую с помощью InterlockedExchange. Но тут код компилиться в ассемблер, и я не могу синхронизировать такие вот "кусочки". Что делать? Есть решение проблемы более прямое, нежели отключение HT?
Из примера не понять, где происходит рассинхронизация, но можно пока отключить HT для вашего процесса программно. Что-то типа: SetProcessAffinityMask(GetCurrentProcess, 1);
Класс! Как-то в голову не пришло. SetProcessAffinityMask рулит А ассемблерных вставок у меня нет - данный код - это то, что получается при компиляции. Т.е. одновременно юзается один элемент класса двумя потоками. Кто-то пишет, а кто-то читает.
если нет синхронизации (крит секции) то affinitymask тебя не спасет. Просто ошибка станет проявляться гораздо реже
Да, ты прав, я это уже понял. Хоть пока и не вылетело, но должно рано или поздно. Чувствую, на winapi перейти надо, дельфовые компоненты кривые нафиг, на пустом месте баги вылезают.