C++11线程安全的队列

才知道一个新知识,还能这样提高效率:http://www.oschina.net/translate/a-fast-lock-free-queue-for-cpp?cmp(快速无锁队列)

typedef const std::function<void(void)> MyFun;
class XThreadPool {
private:
    int mThreadNum = 0;
    std::queue<MyFun> queue;
    std::mutex mutex;
    std::condition_variable cv;
    void runLoop() {
        do {
            std::unique_lock<std::mutex> lk(mutex);
            if(queue.size() > 0) {
                queue.back()();
                queue.pop();
            } else {
                cv.wait(lk);
            }
        } while (1);
    }
public:
    void startNewThread() {
        std::thread thread(std::bind(&XThreadPool::runLoop, this));
        thread.detach();
        ++mThreadNum;
    }
    XThreadPool() {
        startNewThread();
    }
    XThreadPool(int threadNum) {
        for (int i = 0; i < threadNum; ++i) {
            startNewThread();
        }
    }
    int getThreadNum() {
        return mThreadNum;
    }
    virtual ~XThreadPool() {
    }
    void dispatchAsync(MyFun &fun) {
        
        mutex.lock();
        queue.push(fun);
        mutex.unlock();
        cv.notify_one();
    }
    void dispatchAfter(MyFun &fun, long delayMS) {
        
    }
};

 

发表评论

您的电子邮箱地址不会被公开。