2014-02-13 2 views
0

У меня есть приложение, которое отлично работает)) Я написал его в двух вариантах - используя параллельный подход и простой шаг за шагом и даже получил те же результаты ... Но! В ОЧЕНЬ редком случае мой параллельный код создает повторяющиеся данные. Есть ОЧЕНЬ маленький кусок из них - за 400-500 Мб действительных данных я получаю только от 7 до 20 байт мусора и даже не с каждой программой. Но мне это не нравится! Я использовал синхронизированное хранилище данных, но это сторонний код *. Поэтому я полагаю, что проблема есть. Но как я мог отладить эту экзотическую ситуацию?MultyThreading debug (java или VS)

* У меня есть код этого хранения третьей стороны

+0

Знаете ли вы, что это C# или Java, или они оба? –

+0

Ничего страшного) Я мог бы перенести код моего ядра на C# и использовать его с инструментами отладки VS или оставить его в java IDE (у которого, к сожалению, есть более плохие инструменты отладки, как для моего представления) – curiousity

+0

Отладчики не очень подходят для обнаружения гонки условия между потоками. Ничто не сравнится с тем, чтобы код был простым и точно понимал, что делает ваш код. –

ответ

0

Скорее всего, что есть какое-то условие гонки вы не принимая во внимание. Отладка условий гонки может быть сложной, так как вы в конечном итоге измените время, добавив любой код. Самое лучшее, что нужно сделать, это вернуться и действительно продумать, где данные повреждаются.

Я добавлю одну вещь, хотя это заставило меня синхронизировать. Я не знаю о ваших сторонних вещах, но я использовал объекты для синхронизации (Android-вещь?). Я допустил ошибку при использовании булевого объекта, который только указывает на один из двух объектов (True или False). Поэтому, когда мои объекты были названы разными вещами, я действительно синхронизировал те же объекты, на которые они указывали!

Не уверен, что это вообще помогает, но удачи! Многопоточность может быть сложной! Скорее всего, нам понадобятся основные части кода, чтобы действительно изучить эту проблему.