私は C++ でスレッド化するのが初めてで、スレッド間でメモリがどのように共有されているか、共有されていないかを明確に把握しようとしています。std::thread
C++11で使用しています。他のSOの質問で読んだことから、スタックメモリは1つのスレッドのみが所有し、ヒープメモリはスレッド間で共有されます。したがって、スタックとヒープについて理解していると思うことから、次のことが当てはまるはずです。
#include <thread>
using namespace std;
class Obj {
public:
int x;
Obj(){x = 0;}
};
int main() {
Obj stackObj;
Obj *heapObj = new Obj();
thread t([&]{
stackObj.x++;
heapObj->x++;
});
t.join();
assert(heapObj->x == 1);
assert(stackObj.x == 0);
}
ラムダ構文は私にとって非常に新しいものです。しかし、うまくいけば、私がやろうとしていることは首尾一貫しています。これは期待どおりに機能しますか? そうでない場合、私は何を誤解していますか?