fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <thread>
  4. #include <functional>
  5. #include <chrono>
  6. #include <mutex>
  7. std::mutex mtx; // LINE-1
  8.  
  9. class MessageQueue {
  10. private:
  11. int total_elems;
  12. int n;
  13. public:
  14. MessageQueue() : total_elems(0) {}
  15.  
  16. void enqueue(int num_elems) {
  17. std::lock_guard<std::mutex> lock(mtx); // LINE-2
  18. n = num_elems;
  19. int delay = (int)((double)std::rand() / (double)(RAND_MAX) * 10);
  20. std::this_thread::sleep_for(std::chrono::milliseconds(delay));
  21. total_elems += n;
  22. }
  23.  
  24. void dequeue(int num_elems) {
  25. std::lock_guard<std::mutex> lock(mtx); // LINE-3
  26. n = num_elems;
  27. int delay = (int)((double)std::rand() / (double)(RAND_MAX) * 10);
  28. std::this_thread::sleep_for(std::chrono::milliseconds(delay));
  29. total_elems -= n;
  30. }
  31.  
  32. int getElemsCount() {
  33. return total_elems;
  34. }
  35. };
  36.  
Success #stdin #stdout 0.03s 25472KB
stdin
Standard input is empty
stdout
#include <iostream>
#include <vector>
#include <thread>
#include <functional>
#include <chrono>
#include <mutex>
std::mutex mtx;    // LINE-1

class MessageQueue {
private:
    int total_elems;
    int n;
public:
    MessageQueue() : total_elems(0) {}
    
    void enqueue(int num_elems) {
        std::lock_guard<std::mutex> lock(mtx);    // LINE-2
        n = num_elems;
        int delay = (int)((double)std::rand() / (double)(RAND_MAX) * 10);
        std::this_thread::sleep_for(std::chrono::milliseconds(delay));
        total_elems += n;
    }
    
    void dequeue(int num_elems) {
        std::lock_guard<std::mutex> lock(mtx);    // LINE-3
        n = num_elems;
        int delay = (int)((double)std::rand() / (double)(RAND_MAX) * 10);
        std::this_thread::sleep_for(std::chrono::milliseconds(delay));
        total_elems -= n;
    }
    
    int getElemsCount() {
        return total_elems;
    }
};