C++ 将原子变量传递给函数

C++ 将原子变量传递给函数,c++,c++11,atomic,C++,C++11,Atomic,我尝试将原子变量传递给函数,如下所示: // function factor receives an atomic variable void factor(std::atomic<int> ThreadsCounter) { ......... } // main starts here int main() { // Atomic variable declaration std::atomic<int> ThreadsCounter(0)

我尝试将原子变量传递给函数,如下所示:

 // function factor receives an atomic variable 
 void factor(std::atomic<int> ThreadsCounter)
 {
  .........
 }


 // main starts here
 int main()
 {
 // Atomic variable declaration
 std::atomic<int> ThreadsCounter(0);
 // passing atomic variable to the function factor through a thread
 Threadlist[0] = std::thread (factor, std::ref(ThreadsCounter));
 Threadlist[0].join();
 return 0;
 }
//函数因子接收一个原子变量
空隙率(标准::原子螺纹中心)
{
.........
}
//主要从这里开始
int main()
{
//原子变量声明
标准::原子线程中心(0);
//通过线程将原子变量传递给函数因子
Threadlist[0]=std::thread(因子,std::ref(threadsconter));
线程列表[0]。连接();
返回0;
}
运行上述代码时,我遇到以下错误:

错误2错误C2280:'std::atomic::atomic(const std::atomic&'):尝试引用已删除的函数c:\program files(x86)\microsoft visual studio 12.0\vc\include\functional 1149 1 klu\u factor


有人知道怎么解决这个问题吗?非常感谢您的帮助。

函数
factor
按值获取它的
threadsconter
参数,
std::atomic
不可复制构造


即使你绑定了对线程函数的引用,它也在试图创建一个副本来传递函数。

@Collin Dauphinee,我只是试图将函数修改为“void factor(std::atomic&threadsconter)”,但我得到了与我刚刚编译并运行测试用例相同的错误,请仔细检查你是否确实构建了更改。是的,我的错,我修改了源文件,但没有修改头文件。它现在可以工作了,谢谢@Collin Dauphinee,增加函数中原子变量的最佳方法是什么。对不起,我对原子变量还是新手