Разделение памяти между потоками C++

Я новичок в многопоточности на С++, и я пытаюсь получить четкое представление о том, как память распределяется/не распределяется между потоками. Я использую std::threadс С++ 11. Из того, что я прочитал по другим вопросам SO, память стека принадлежит только одному потоку, а память кучи распределяется между потоками. Итак, из того, что я думаю, я понимаю о стеке и куче, должно быть верно следующее:

#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);
}

простите меня, если я напортачил кучу вещей, синтаксис лямбда очень нов для меня. Но, надеюсь, то, что я пытаюсь сделать, последовательно. Будет ли это работать так, как я ожидаю? А если нет, то что я неправильно понимаю?

20
задан Michael Dorst 24 July 2016 в 21:02
поделиться