fork download
  1. #include <iostream>
  2. #include <thread>
  3. #include <mutex>
  4.  
  5. using namespace std;
  6.  
  7. //Do máy tính chưa cài đặt C++ nên em xin phép được dùng ideone.com để làm ạ
  8.  
  9. class A {
  10. public:
  11. int16_t sum(int16_t var1,int16_t var2)
  12. {
  13. return var1 + var2;
  14. }
  15. };
  16.  
  17. class B{
  18. public:
  19. int16_t multiplication(int16_t var1, int16_t var2)
  20. {
  21. return var1 * var2;
  22. }
  23. };
  24.  
  25. class C{
  26. private:
  27. A a;
  28. public:
  29. int16_t calculate(int16_t var1,int16_t var2)
  30. {
  31. return a.sum(var1, var2)+5;
  32. }
  33. };
  34.  
  35. class Factory{
  36. private:
  37. Factory();
  38. // static Factory* instancePtr;
  39. static Factory instancePtr;
  40.  
  41. static mutex mtx;
  42. A* instanceA;
  43. B* instanceB;
  44. C* instanceC;
  45. ~Factory(){
  46.  
  47. }
  48. public:
  49.  
  50. Factory(const Factory& obj) = delete;
  51.  
  52. // static Factory* getInstance() {
  53. // if (instancePtr == nullptr) {
  54. // lock_guard<mutex> lock(mtx);
  55. // if (instancePtr == nullptr) {
  56. // instancePtr = new Factory();
  57. // }
  58. // }
  59. // return instancePtr;
  60. // }
  61.  
  62. static Factory& getInstance() {
  63. return instancePtr;
  64. }
  65.  
  66. A* createA()
  67. {
  68. return instanceA;
  69. }
  70.  
  71. B* createB(){
  72. return instanceB;
  73. }
  74.  
  75. C* createC(){
  76. return instanceC;
  77. }
  78.  
  79. void destroy(){
  80. delete instanceA;
  81. delete instanceB;
  82. delete instanceC;
  83. }
  84.  
  85. };
  86.  
  87.  
  88. void runFactoryThread()
  89. {
  90. Factory & factory = Factory::getInstance();
  91. A* a = factory.createA();
  92. cout <<a->sum(3,7) <<endl;
  93.  
  94. B* b = factory.createB();
  95. cout <<b->multiplication(3,7) <<endl;
  96.  
  97. C* c = factory.createC();
  98. cout <<c->calculate(3,7) <<endl;
  99.  
  100. // factory.destroy();
  101.  
  102. }
  103.  
  104. int main() {
  105. Factory & factory = Factory::getInstance();
  106. A* a = factory.createA();
  107. cout <<a->sum(3,7) <<endl;
  108.  
  109. B* b = factory.createB();
  110. cout <<b->multiplication(3,7) <<endl;
  111.  
  112.  
  113. C* c = factory.createC();
  114. cout <<c->calculate(3,7) <<endl;
  115.  
  116. // factory.destroy();
  117.  
  118. //Multithread
  119. std::thread th1(runFactoryThread);
  120. std::thread th2(runFactoryThread);
  121.  
  122. th1.join();
  123. th2.join();
  124.  
  125.  
  126. }
Success #stdin #stdout 0.01s 5268KB
stdin
Standard input is empty
stdout
10
21
15
10
21
15
10
21
15