通过N个线程顺序循环打印从0至100

【通过N个线程顺序循环打印从0至100】为什么80%的码农都做不了架构师?>>>通过N个线程顺序循环打印从0至100
文章图片

如:

通过N个线程顺序循环打印从0至100,如给定N=3则输出: thread0: 0 thread1: 1 thread2: 2 thread0: 3 thread1: 4 .....

解:N个线程对应N个条件变量,依次激活下一个线程
#include #include #include #include #include constexpr int THREADS = 3; constexpr int MAX = 100; std::mutex m; std::condition_variable cv[THREADS]; bool flags[THREADS]; int n = 0; void f(int i) { const int next = (i + 1) % THREADS; for (; ; ) { std::unique_lock lock(m); cv[i].wait(lock, [=](){return flags[i]; }); if (n <= MAX) std::cout << "thread " << i << ": " << n++ << std::endl; flags[i] = false; flags[next] = true; lock.unlock(); cv[next].notify_one(); if (n > MAX) break; } }int main() { flags[0] = true; std::vector vec; for (int i = 0; i < THREADS; ++i) vec.emplace_back(f, i); for (auto &t: vec) t.join(); return 0; }


转载于:https://my.oschina.net/guzhou/blog/3023693

    推荐阅读