Чего следует избегать по соображениям производительности в многопоточном коде?

В настоящее время я рассматриваю / реорганизую многопоточное приложение, которое должно быть многопоточным, чтобы иметь возможность использовать все доступные ядра и теоретически обеспечить лучшую / превосходную производительность (улучшенный - коммерческий термин для лучшего: P)

Что я должен знать при программировании многопоточных приложений?

Я имею в виду вещи, которые сильно повлияют на производительность, может быть, даже до такой степени, что вы ничего не получите от многопоточности, но много потеряете из-за сложности проекта. Каковы большие красные флаги для многопоточных приложений?

Должен ли я начать расспрашивать замки и искать стратегию без блокировок или есть другие важные моменты, которые должны зажечь сигнальную лампу?

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

Я использую Delphi 7, хотя приложение будет перенесено / переделано в .NET (c #) на следующий год, поэтому я бы предпочел услышать комментарии, которые применимы в качестве общей практики, и если они должны быть специфичными для любого из эти языки

Ответы на вопрос(12)

Ваш ответ на вопрос