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