C++ 声明全局屏障并在本地初始化它

C++ 声明全局屏障并在本地初始化它,c++,C++,我有一个线程屏障的实现 class my_barrier { public: my_barrier(int count) : thread_count(count) , counter(0) , waiting(0) {} void wait() { //fence mechanism std::unique_lock<std::mutex> lk(m);

我有一个线程屏障的实现

class my_barrier
{

public:
    my_barrier(int count)
        : thread_count(count)
        , counter(0)
        , waiting(0)
    {}

    void wait()
    {
        //fence mechanism
        std::unique_lock<std::mutex> lk(m);
        ++counter;
        ++waiting;
        cv.wait(lk, [&] {return counter >= thread_count; });
        cv.notify_one();
        --waiting;
        if (waiting == 0)
        {
            //reset barrier
            counter = 0;
        }
        lk.unlock();
    }

private:
    std::mutex m;
    std::condition_variable cv;
    int counter;
    int waiting;
    int thread_count;
};
class my\u屏障
{
公众:
my_屏障(整数计数)
:线程计数(计数)
,计数器(0)
,正在等待(0)
{}
无效等待()
{
//围栏机制
std::唯一锁lk(m);
++计数器;
++等待;
等待(lk,[&]{返回计数器>=线程计数;});
cv.通知_one();
--等待;
如果(等待==0)
{
//重置屏障
计数器=0;
}
lk.unlock();
}
私人:
std::互斥m;
std::条件变量cv;
整数计数器;
等待;
int线程计数;
};

我试图做的是全局声明这个类的一个实例,但只在main中初始化它,因为我从控制台读取线程数,所以在运行前我不知道初始化的值,你能帮我解决这个问题吗?

局部变量有什么问题吗?我必须将它传递给多线程的辅助函数,我无法使它像一个过路人一样工作。@有人建议我们找到一个使其全局化的解决方案,局部变量只是最后一个解决方案可能相关: