Występuje uszkodzenie kopert w moim zarządzanym programie wielowątkowym. Wykonując niektóre testy stwierdziłem, że korupcja dzieje się tylko wtedy, gdy wątki tła są aktywne w programie (można je przełączać). W wątkach używane są składniki innych firm..NET 4: Czy sam kod zarządzany może spowodować uszkodzenie sterty?
Po zbadaniu kodu wątków i 3 elementów zewnętrznych (z .NET Reflector) Okazało się, że wszystkie one są zarządzane, to znaczy nr „niebezpieczne” lub „DllImportAttribute” lub „P/Invoke”. Wydaje się, że czysto zarządzany kod powoduje uszkodzenie sterty, czy to możliwe?
UPDATE
Oprócz korzystania klasy Marshal, możliwe jest uszkodzenie sterty z wątków nie są prawidłowo zsynchronizowane? Przykład byłby bardzo doceniany.
Tylko dlatego, że są one wszystko zarządzane, nie oznacza, że wszystko jest bezpieczne dla wątków. Czy upewniasz się, że kod wykonuje się w sposób bezpieczny dla wątków, używając zamków, itp. W razie potrzeby? –
Istnieją również metody klasy Marshal, które mogą to zrobić. –
@ChrisDunaway, czy mówisz, że niewłaściwe blokowanie lub wykonywanie wątków w sposób bezpieczny dla wątków może uszkodzić stertę nawet bez użycia klasy Marshal? Miałem odpowiedź, że nie jest to możliwe ([tutaj] (http://stackoverflow.com/questions/7471288/what-tools-are-available-to-detect-heap-corruption-in-net-c-program/ 7471468 # 7471468)). –