Advertisement
vallec

Untitled

Dec 1st, 2024
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <thread>
  3. #include <mutex>
  4. #include <chrono>
  5. using namespace std;
  6.  
  7. mutex mutexBank;
  8. int minMoney = 5000;
  9. int currentMoney = 10000;
  10. int depositMoney = 250;
  11. int creditMoney = 500;
  12.  
  13. void creditThreadFunction() {
  14. while (true) {
  15. mutexBank.lock(); // Започваме критична секция
  16. if (currentMoney - creditMoney <= minMoney) {
  17. // Няма достатъчно средства, правим пауза
  18. mutexBank.unlock(); // Освобождаваме мютекса, преди да заспим
  19. this_thread::sleep_for(chrono::seconds(6));
  20. } else {
  21. // Намаляваме текущите средства
  22. currentMoney -= creditMoney;
  23. mutexBank.unlock(); // Освобождаваме мютекса след теглене
  24. this_thread::sleep_for(chrono::seconds(1));
  25. }
  26. }
  27. }
  28.  
  29. void depositThreadFunction() {
  30. while (true) {
  31. mutexBank.lock(); // Започваме критична секция
  32. currentMoney += depositMoney; // Увеличаваме текущите средства
  33. mutexBank.unlock(); // Освобождаваме мютекса след внасяне
  34. this_thread::sleep_for(chrono::seconds(1));
  35. }
  36. }
  37.  
  38. int main()
  39. {
  40. thread *t1, *t2, *t3, *t4;
  41.  
  42. t1 = new thread(creditThreadFunction);
  43. t2 = new thread(creditThreadFunction);
  44. t3 = new thread(depositThreadFunction);
  45. t4 = new thread(depositThreadFunction);
  46.  
  47. while (true) {
  48. mutexBank.lock();
  49. printf("Main Money: %d\n", currentMoney);
  50. mutexBank.unlock();
  51. this_thread::sleep_for(chrono::seconds(1)); // Пауза между проверките
  52. }
  53.  
  54. t1->join();
  55. t2->join();
  56. t3->join();
  57. t4->join();
  58.  
  59. return 0;
  60. }
  61.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement