Codes

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].
2024-04-29
2 min read

Flex&Bison

Flex 头文件检查 下面代码用于递归检查 C 头文件是否都存在 %option noyywrap warn nodefault %x IFILE %{ struct bufstack { struct bufstack *prev; /* previous entry */ YY_BUFFER_STATE bs; /* saved buffer */ int lineno; /* saved line number */ char *filename; /* name of this file */ FILE *f; /* current file */ } *curbs = 0; char *curfilename;
2020-08-29
2 min read