Czego unikać ze względu na wydajność w kodzie wielowątkowym?

Obecnie przeglądam / refaktoryzuję aplikację wielowątkową, która ma być wielowątkowa, aby móc korzystać ze wszystkich dostępnych rdzeni i teoretycznie zapewniać lepszą / lepszą wydajność (lepsze jest określenie komercyjne na lepsze: P)

Jakie rzeczy powinienem wiedzieć podczas programowania aplikacji wielowątkowych?

Mam na myśli rzeczy, które znacznie wpłyną na wydajność, być może nawet do tego stopnia, że ​​nie uzyskasz niczego przy wielowątkowości, ale stracisz dużo na złożoności projektu. Jakie są duże czerwone flagi dla aplikacji wielowątkowych?

Czy powinienem zacząć kwestionować zamki i sprawdzać strategię bez blokady, czy też są inne ważne punkty, które powinny zapalić światło ostrzegawcze?

Edytować: Odpowiedzi, które chciałbym uzyskać, są podobne do odpowiedzi Janusza, chcę, żeby czerwone ostrzeżenia wyszukały w kodzie, wiem, że aplikacja nie działa tak dobrze, jak powinna, muszę wiedzieć, od czego zacząć, co powinienem się martwić i gdzie powinienem umieścić moje wysiłki. Wiem, że to rodzaj ogólnego pytania, ale nie mogę opublikować całego programu, a gdybym mógł wybrać jedną sekcję kodu, nie musiałbym pytać w pierwszej kolejności.

Używam Delphi 7, chociaż aplikacja zostanie przeniesiona / remake w .NET (c #) na następny rok, więc wolę usłyszeć komentarze, które mają zastosowanie jako ogólna praktyka i jeśli muszą być specyficzne dla jednego z nich te języki

questionAnswers(12)

yourAnswerToTheQuestion