#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
//Do máy tính chưa cài đặt C++ nên em xin phép được dùng ideone.com để làm ạ
class A {
public:
int16_t sum(int16_t var1,int16_t var2)
{
return var1 + var2;
}
};
class B{
public:
int16_t multiplication(int16_t var1, int16_t var2)
{
return var1 * var2;
}
};
class C{
private:
A a;
public:
int16_t calculate(int16_t var1,int16_t var2)
{
return a.sum(var1, var2)+5;
}
};
class Factory{
private:
Factory();
// static Factory* instancePtr;
static Factory instancePtr;
static mutex mtx;
A* instanceA;
B* instanceB;
C* instanceC;
~Factory(){
}
public:
Factory(const Factory& obj) = delete;
// static Factory* getInstance() {
// if (instancePtr == nullptr) {
// lock_guard<mutex> lock(mtx);
// if (instancePtr == nullptr) {
// instancePtr = new Factory();
// }
// }
// return instancePtr;
// }
static Factory& getInstance() {
return instancePtr;
}
A* createA()
{
return instanceA;
}
B* createB(){
return instanceB;
}
C* createC(){
return instanceC;
}
void destroy(){
delete instanceA;
delete instanceB;
delete instanceC;
}
};
void runFactoryThread()
{
Factory & factory = Factory::getInstance();
A* a = factory.createA();
cout <<a->sum(3,7) <<endl;
B* b = factory.createB();
cout <<b->multiplication(3,7) <<endl;
C* c = factory.createC();
cout <<c->calculate(3,7) <<endl;
// factory.destroy();
}
int main() {
Factory & factory = Factory::getInstance();
A* a = factory.createA();
cout <<a->sum(3,7) <<endl;
B* b = factory.createB();
cout <<b->multiplication(3,7) <<endl;
C* c = factory.createC();
cout <<c->calculate(3,7) <<endl;
// factory.destroy();
//Multithread
std::thread th1(runFactoryThread);
std::thread th2(runFactoryThread);
th1.join();
th2.join();
}