小编Tin*_*lpe的帖子

std::condition_variable::notify_all() 仅唤醒线程池中的一个线程

我正在尝试编写一个非常简单的线程池来了解它们在幕后是如何工作的。不过,我遇到了问题。当我使用condition_variable并调用notify_all()时,它只会唤醒池中的一个线程。

其他一切都很好。我已经排队了 900 个工作,每个工作都有不错的负载。唤醒的一个线程会消耗所有这些作业,然后返回睡眠状态。在下一个循环中,这一切都会再次发生。

问题是只有一个线程完成这项工作!我怎么搞砸了这个模板?

线程池.h:

#pragma once

#include <mutex>
#include <stack>
#include <atomic>
#include <thread>
#include <condition_variable>

class ThreadPool
{
friend void __stdcall ThreadFunc();

public:
    static ThreadPool & GetInstance()
    {
        static ThreadPool sInstance;

        return (sInstance);
    }

public:
    void AddJob(Job * job);
    void DoAllJobs();

private:
    Job * GetJob();

private:
    const static uint32_t ThreadCount = 8;

    std::mutex                  JobMutex;
    std::stack<Job *>           Jobs;
    volatile std::atomic<int>   JobWorkCounter;
    std::mutex                  SharedLock;
    std::thread                 Threads[ThreadCount];
    std::condition_variable     Signal;

private:
    ThreadPool();
    ~ThreadPool();

public:
    ThreadPool(ThreadPool const &) = delete;
    void operator …
Run Code Online (Sandbox Code Playgroud)

c++ std condition-variable threadpool

1
推荐指数
1
解决办法
1847
查看次数

标签 统计

c++ ×1

condition-variable ×1

std ×1

threadpool ×1