#include <cstdio>
#include <iostream>
#include <random>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <chrono>
#include <ctime>
#define _USE_MATH_DEFINES
#include <math.h>
#include <time.h>
#include <iostream>
#include <thread>
#include <atomic>
#include <vector>
#include <mutex>
using namespace std;
struct Test_S
{
vector<double> test_vector1;
vector<double> test_vector2;
mutex test_mtx;
};
class Base
{
public:
Base() {}
void domath() { cout << "base function\n"; }
int i;
};
class Derived1 : public Base
{
public:
Derived1() {}
void domath1(Test_S* test_s) const { test_s->test_vector1.push_back(1); }
};
class Derived2 : public Base
{
public:
Derived2() {}
void domath2(Test_S* test_s) const { test_s->test_vector2.push_back(2); }
};
int main()
{
Base base;
Derived1 derived1;
Derived2 derived2;
Test_S test_s;
std::thread t1(&Derived1::domath1, &derived1, &test_s);
std::thread t2(&Derived2::domath2, &derived2, &test_s);
t1.join();
t2.join();
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmFuZG9tPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxjaHJvbm8+CiNpbmNsdWRlIDxjdGltZT4KI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwojaW5jbHVkZSA8bWF0aC5oPgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx0aHJlYWQ+CiNpbmNsdWRlIDxhdG9taWM+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxtdXRleD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgVGVzdF9TCnsKCXZlY3Rvcjxkb3VibGU+IHRlc3RfdmVjdG9yMTsKCXZlY3Rvcjxkb3VibGU+IHRlc3RfdmVjdG9yMjsKCW11dGV4IHRlc3RfbXR4Owp9OwoKY2xhc3MgQmFzZQp7CnB1YmxpYzoKCUJhc2UoKSB7fQoJdm9pZCBkb21hdGgoKSB7IGNvdXQgPDwgImJhc2UgZnVuY3Rpb25cbiI7IH0KCWludCBpOwp9OwoKY2xhc3MgRGVyaXZlZDEgOiBwdWJsaWMgQmFzZQp7CnB1YmxpYzoKCURlcml2ZWQxKCkge30KCXZvaWQgZG9tYXRoMShUZXN0X1MqIHRlc3RfcykgY29uc3QgeyB0ZXN0X3MtPnRlc3RfdmVjdG9yMS5wdXNoX2JhY2soMSk7IH0KfTsKCmNsYXNzIERlcml2ZWQyIDogcHVibGljIEJhc2UKewpwdWJsaWM6CglEZXJpdmVkMigpIHt9Cgl2b2lkIGRvbWF0aDIoVGVzdF9TKiB0ZXN0X3MpIGNvbnN0IHsgdGVzdF9zLT50ZXN0X3ZlY3RvcjIucHVzaF9iYWNrKDIpOyB9Cn07CgppbnQgbWFpbigpCnsKCUJhc2UgYmFzZTsKCURlcml2ZWQxIGRlcml2ZWQxOwoJRGVyaXZlZDIgZGVyaXZlZDI7CgkKCVRlc3RfUyB0ZXN0X3M7CgkKCXN0ZDo6dGhyZWFkIHQxKCZEZXJpdmVkMTo6ZG9tYXRoMSwgJmRlcml2ZWQxLCAmdGVzdF9zKTsKCXN0ZDo6dGhyZWFkIHQyKCZEZXJpdmVkMjo6ZG9tYXRoMiwgJmRlcml2ZWQyLCAmdGVzdF9zKTsKCQoJdDEuam9pbigpOwoJdDIuam9pbigpOwoJCglyZXR1cm4gMDsKfQ==