前提
c++/CLIを用いて、マルチスレッド処理を行うアプリを作成しています。
環境はVisual Studio 2019です。
質問
以下のようなdllを作成して、スレッド1とスレッド2でそれぞれでクラスをnewした後、
スレッド1でProc1をコールし、
スレッド2でProc2をコールした場合、
グローバル変数iRequest はスレッド間で共有されますか?
c++
1int iRequest = 0; 2 3namespace Wrapper 4{ 5 public ref class WrapperClass 6 { 7 //スレッド1で呼ぶ 8 int Wrapper::WrapperClass::Proc1() 9 { 10 return iRequest; 11 } 12 13 //スレッド2で呼ぶ 14 int Wrapper::WrapperClass::Proc2() 15 { 16 iRequest++; 17 return iRequest; 18 } 19 } 20}
上記のコードを動かしたときに、スレッド1ではiRequestは0のままで、スレッド2ではインクリメントされた値が帰ってくると考えていたのですが、予想に反してスレッド1でもインクリメントされた値が返ってきました。
自分はスレッド毎に別のアドレス空間だと思っていたのですが、そうではないでしょうか?
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/14 01:22