は、私が持っている:他のスレッドスタック変数へのアクセスはどのようにしてС++で動作しますか?例えば
int main()
{
int i = 0;
std::thread t([&] {
for (int c = 0; c < 100; ++c)
++i;
});
t.join();
return 0;
}
スレッドt
変更変数i
値を。 私は、OSが現在のスレッドを変更すると、古いスレッドスタックを保存して新しいスレッドスタックをコピーする必要があると思います。
オペレーションシステムは、i
にどのように正しくアクセスできますか? オペレーティングシステムレベルでどのように動作するのか説明がありますか?ラムダ関数のローカル変数のキャプチャとどのようにスレッドとそのスタックが動作:あなたの例のコードで遊んで二つの別々のものがあります
int main()
{
int* i = new int;
std::thread t([&] {
for (int c = 0; c < 100; ++c)
++(*i);
});
t.join();
return 0;
}
参考資料:http://en.cppreference.com/w/cpp/language/lambda(ヒント:「i」は参照によって取得されます) –
参照の仕組みを知っていますか?スレッドはプロセスのメモリを共有していることは知っていますか? –
スタックをデプロイするときにOSが実際に変数を移動しないとします。それは参照を使用していますか?または、現在のスレッドのスタックを指しているかもしれませんか? – voltento