C++ 实现的多生产者和多消费者的lock-free 队列
flyfish
源码下载地址
一共 20个线程,10个是生产者 10个是 消费者
#include <iostream>
#include <concurrentqueue.h>
using namespace moodycamel;
using namespace std;int main()
{cout << "Hello World!" << endl;ConcurrentQueue<int> q;int dequeued[100] = { 0 };std::thread threads[20];// Producersfor (int i = 0; i != 10; ++i) {threads[i] = std::thread([&](int i) {for (int j = 0; j != 10; ++j) {q.enqueue(i * 10 + j);}}, i);}// Consumersfor (int i = 10; i != 20; ++i) {threads[i] = std::thread([&]() {int item;for (int j = 0; j != 20; ++j) {if (q.try_dequeue(item)) {++dequeued[item];}}});}// Wait for all threadsfor (int i = 0; i != 20; ++i) {threads[i].join();}// Collect any leftovers (could be some if e.g. consumers finish before producers)int item;while (q.try_dequeue(item)) {++dequeued[item];}// Make sure everything went in and came back out!for (int i = 0; i != 100; ++i) {assert(dequeued[i] == 1);}return 0;
}
lock-free 队列 这份代码用四个字形容就是 叹为观止
叹为观止:赞叹观赏的对象精妙之极、完美之至。到这里就够了,指赞美所见到的事物好到了极点。
为什么这么说呢?
原话形容就是
Knock-your-socks-off blazing fast performance.
blazing fast performance。要形容自己的代码超快的性能,就要用blazing fast。如果用faster,fastest是不是就low了
blazing 熊熊燃烧的;烈日当空的;烈日炎炎的;灿烂的
knock your socks off 或者 blow your socks off
Knock是敲或打的意思。Knock your socks off的意思类似“叹为观止。”英译是to surprise or impress sb very much。
据说美国人对美国的南方人有一种偏见是就是南方人喜欢赤脚,百事可乐想让饮料好卖打了广告,说喝了咱的饮料啊,就能体验到南方人光脚的快乐。
与knock your socks off 对应的是pull your socks up
pull your socks up 源于跑步比赛,比赛前要提提袜子也就意味着比赛即将开始,运动员们各就各位了。现在是要振作起来的意思。
knock your socks off 按字面来解释也就是,运动员跑的太快了,脚上的袜子都能跑飞了,运动员跑步的速度令你叹为观止。