トップ回答者
マルチスレッドアプリケーションでの適切なlockのかけ方

質問
-
winxp+sp2
VS2005 C#
次のようなクラスがあります。
static class sample {
private static object m_lock = new object();
private static string m_RetVal2 = "";
static sample() {}public static string test(string val1, string val2){
string Ret = "";
string Retval1 = "";lock (m_lock) {
Retval1 = val1;
m_RetVal2 = val2;
}Ret = Retval1 + m_RetVal2;
return Ret;
}
}マルチスレッドでtest()メソッドを複数のスレッドから呼び出します。
スレッド1 string val = sample .test("A", "B")
スレッド2 string val = sample .test("c", "d")
スレッド1は結果として"AB"をスレッド1は結果として"cd"を受け取りたいのですが、m_RetVal2 はprivate変数なので"B"と"d"がメソッド実行のタイミングにより入れ替わってしまう事があると思います。(防ぐにはreturnもlockに入れてしまえばいいと思います。)
今回教えて頂きたいのは、"A"と"c"がメソッド実行のタイミングにより入れ替わってしまう事があるかどうかです。入れ替わる事は無いだろうと考えていますが、知っている人がいましたら宜しくお願いします。
また、この状況の場合スレッド1とスレッド2から呼び出されたメソッドはどこまでが共通のメモリを使用され、どこまでが個別のメモリを使用されるのかも教えて頂ければと思います。