CPP Multi-Threading Codes
CPP Multi-Threading #include <atomic> #include <ctime> #include <iostream> #include <memory> #include <mutex> #include <numeric> #include <thread> #include <vector> constexpr int THD_NUM = 20; constexpr int CNT_PER_THD = 50000000; using namespace std; class Counter { public: virtual void operator++() {} virtual int64_t get() const { return 0; } virtual ~Counter() {} }; class DistributedCounter : public Counter { private: int64_t count{}; std::mutex mutable mtx; public: void operator++() override { std::lock_guard<std::mutex> lock(mtx); ++count; } int64_t get() const override { std::lock_guard<std::mutex> lock(mtx); return count; } }; class DistributedCounterMultMtx : public Counter { struct bucket { mutable std::mutex sm; int64_t count{}; }; static size_t const buckets{THD_NUM}; std::vector<bucket> counts{buckets}; public: void operator++() override { size_t index = std::hash<thread::id>()(std::this_thread::get_id()) % buckets; std::lock_guard<std::mutex> ul(counts[index].