#include <iostream>
#include <cstdlib>
#include <ctime>
#include <thread>
class sampleClass {
public:
int x = rand() % 100;
sampleClass() {std::cout << "constructor called, x=" << x << std::endl;}
sampleClass(const sampleClass &SC) {std::cout << "copy constructor called, x=" << x << std::endl;}
~sampleClass() {std::cout << "destructor called, x=" << x << std::endl;}
void add_to_x() {x += rand() % 3;}
};
void sampleThread(sampleClass& SC) {
for (int i = 0; i < 1e8; ++i) { //give the thread something to do
SC.add_to_x();
}
std::cout << "thread finished, x=" << SC.x << std::endl;
}
int main() {
srand (time(NULL));
sampleClass SC;
std::thread t1 (sampleThread, std::ref(SC));
std::cout << "thread spawned" << std::endl;
t1.join();
std::cout << "thread joined" << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPiAgCiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDx0aHJlYWQ+CgpjbGFzcyBzYW1wbGVDbGFzcyB7CnB1YmxpYzoKICAgIGludCB4ID0gcmFuZCgpICUgMTAwOwogICAgc2FtcGxlQ2xhc3MoKSB7c3RkOjpjb3V0IDw8ICJjb25zdHJ1Y3RvciBjYWxsZWQsIHg9IiA8PCB4IDw8ICAgICBzdGQ6OmVuZGw7fQogICAgc2FtcGxlQ2xhc3MoY29uc3Qgc2FtcGxlQ2xhc3MgJlNDKSB7c3RkOjpjb3V0IDw8ICJjb3B5IGNvbnN0cnVjdG9yIGNhbGxlZCwgeD0iIDw8IHggPDwgc3RkOjplbmRsO30KICAgIH5zYW1wbGVDbGFzcygpIHtzdGQ6OmNvdXQgPDwgImRlc3RydWN0b3IgY2FsbGVkLCB4PSIgPDwgeCA8PCBzdGQ6OmVuZGw7fQogICAgdm9pZCBhZGRfdG9feCgpIHt4ICs9IHJhbmQoKSAlIDM7fQp9OwoKdm9pZCBzYW1wbGVUaHJlYWQoc2FtcGxlQ2xhc3MmIFNDKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDFlODsgKytpKSB7IC8vZ2l2ZSB0aGUgdGhyZWFkIHNvbWV0aGluZyB0byBkbwogICAgICAgIFNDLmFkZF90b194KCk7CiAgICB9CiAgICBzdGQ6OmNvdXQgPDwgInRocmVhZCBmaW5pc2hlZCwgeD0iIDw8IFNDLnggPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIHNyYW5kICh0aW1lKE5VTEwpKTsKICAgIHNhbXBsZUNsYXNzIFNDOwogICAgc3RkOjp0aHJlYWQgdDEgKHNhbXBsZVRocmVhZCwgc3RkOjpyZWYoU0MpKTsKICAgIHN0ZDo6Y291dCA8PCAidGhyZWFkIHNwYXduZWQiIDw8IHN0ZDo6ZW5kbDsKICAgIHQxLmpvaW4oKTsKICAgIHN0ZDo6Y291dCA8PCAidGhyZWFkIGpvaW5lZCIgPDwgc3RkOjplbmRsOwp9Cg==