CMutexの使いかた

解決


ひる  2011-07-16 02:10:41  No: 72818

複数のMFCアプリケーションから同一のファイルを読み書きする必要があります。

この場合はアプリケーション間の排他制御なので、
ミューテックスを使わないといけないのだろうと思っているのですが、

ファイル読み書き関数()
{
    CMutex mutex(FALSE, _T("適当なミューテックス名"));
    CSingleLock lock(&mutex, TRUE);

    ファイルを読み書き;
}

というような2行を追加するだけで構わないものなのでしょうか。
ネットでソースを探してみると、CMutexがメンバ変数になっていたり、
CSingleLockを使っていなかったり、MFCのクラスを使っていなかったりで、
上記のような使いかたをしている例があまりなく、
これでも正しいものなのか確信が持てずにいます。

このへんの使いかたにお詳しいかたにお聞きできればと思います。


επιστημη  URL  2011-07-16 16:25:34  No: 72819

「...というような2行を追加するだけで構わないものなの」
か否かはやってみればわかることやないかと。


ひる  2011-07-16 20:43:59  No: 72820

もちろん簡単なテストプログラムでは確認しています。

ただ、テストプログラムでは確認できないパターンもあるでしょうし、
テストプログラムでは大丈夫だったけど実際の環境では発生したなんていう経験もありますし、
やってみて「大丈夫そうだな」では恐くて見切り発車できないのです。

そのため、このへんのクラスを使いこなされているかたにお聞きできればと思っています。


επιστημη  URL  2011-07-17 01:01:05  No: 72821

当該ファイルを利用する全アプリケーションに亘り、ファイルの読み書きがこの関数を介してのみ行われていることが保証できるなら、まず問題なし、と考えます。


ひる  2011-07-22 03:16:11  No: 72822

ありがとうございます。
上記の2行を書くだけでよいのですね。

この手のレースコンディションが絡む問題への対応機能は、
どうしても自前のテストプログラムだけでは確信が持てないところなので、
詳しいかたの意見をお伺いできて助かりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加