1

アプリケーションはVC++6.0で開発されています。これをマルチスレッドおよびマルチプロセッサ環境でその依存サービスとともに実行すると、文字列形式や文字列コピーなどの文字列操作を試行すると、依存サービスの1つがクラッシュします。ただし、これはシングルプロセッサ環境では観察されず、ほとんどの場合、コールスタックは次のようになります。

mfc42u!CFixedAlloc :: Alloc + 82 005b5b64 00000038 005b5b64

mfc42u!CString :: AllocBuffer + 3f 00000038 00000038 005b5b64

mfc42u!CString :: AllocBeforeWrite + 31 00000038 0a5bfdbc 005b5b64

mfc42u!CString :: AssignCopy + 13 00000038 057cb83f 0a5bfe90

mfc42u!CString :: operator = + 4b

誰もがそのような問題に直面しました。

4

1 に答える 1

1

これは、マルチスレッド環境用に開発またはテストされていないアプリケーションが突然マルチスレッド環境に配置された場合に正常です。

実際、これは仮定に違反するという単純な問題です。このコードは、一度に1つのスレッドだけが実行することを前提として書かれていることは間違いありません。あなたがそれらの仮定に違反するならば、物事はそれほど良くありません。

解決策は、仮定に違反しないことです。一度に1つのスレッドだけがコードを実行できることを確認してください。

于 2009-07-11T12:13:25.333 に答える