CMutexの使いかた

解決


ひる  2011-07-15 17:10:41  No: 72818  IP: 192.*.*.*

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

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

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

    ファイルを読み書き;
}

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

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

編集 削除
επιστημη  URL  2011-07-16 07:25:34  No: 72819  IP: 192.*.*.*

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

編集 削除
ひる  2011-07-16 11:43:59  No: 72820  IP: 192.*.*.*

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

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

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

編集 削除
επιστημη  URL  2011-07-16 16:01:05  No: 72821  IP: 192.*.*.*

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

編集 削除
ひる  2011-07-21 18:16:11  No: 72822  IP: 192.*.*.*

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

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

編集 削除