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中初始化它,因为我从控制台读取线程数,所以在运行前我不知道初始化的值,你能帮我解决这个问题吗?局部变量有什么问题吗?我必须将它传递给多线程的辅助函数,我无法使它像一个过路人一样工作。@有人建议我们找到一个使其全局化的解决方案,局部变量只是最后一个解决方案可能相关: