DeleteCriticalSectionで落ちるケース – プログラミング – Home

通知
すべてクリア

DeleteCriticalSectionで落ちるケース


にゃかた
 にゃかた
(@にゃかた)
ゲスト
結合: 22年前
投稿: 1
Topic starter  

はじめまして。にゃかたと申します。

自作の常駐マルチスレッドプログラムが1ヶ月に1度とか1週間に一度、もしくは
数ヶ月落ちないなど不安定な状態になっています。
ダンプを調べてみるとMSVCRTD.operator delete()内部や
ntdll.DeleteCriticalSection()でアクセス違反が発生しています。

operator delete()についてはスレッド間で共有している領域ではないのと
delete内部でCALLされる_free_dbg()または_free_dbg_lk()で落ちています。
普通は手前のメモリチェックマクロで引っかかるはずが通過しています。

DeleteCriticalSection()に至ってはなにがなんだかわかりません。
CRITICAL_SECTION構造体の実体は外部変数で宣言しており、当然構造体メンバ変数には
手を加えていません。

このような事象が発生するケースが知りたいのですが、どのようなケースが存在するのか
ご教授いただけませんでしょうか?

OS:WindowsNT 4.0 Server SP5 or 6a, Windows2000 SP3
2CPUマシンでのみ発生し、1CPUマシンでは1件も起きていません。

以上、よろしくお願いいたします。


引用解決済
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

直接的な回答ではありません。
参考程度に読んでいただければと思います。
私がざっと調べた感じではVCやライブラリの不具合でそういう現象が
起こるというケースは見つける事が出来ませんでした。

マルチCPUでのみ起こり、シングルCPU環境では起こっていないという
ケースだけから想像できるのは、スレッド間の同期が取れないような
ケースが問題のプログラム上にあるのではという事です。
処理の重さを頼りにスレッド間で動作の同期を取っている部分は
ないでしょうか?
シングルCPUよりもマルチCPUの方がスレッドの同期はよりシビアに
なると思います。もしかするとシングルCPUでは考えられないような
順番でスレッドが動いてしまうケースがあるのかもしれません。
もう一度、スレッド間の同期に問題ないかどうか確認されては
どうでしょうか?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました